有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在React Native中调用Java字符串并实时显示

我用java创建了字符串:

import java.lang.Math; 
import java.io.*;
import java.util.*;

public class Test {

    public int measureConcentration(double[] means){
        return (int) ((means[3] / means[1]) * 100) ;
    } 

    public static void main(String[] args) {

        int score = measureConcentration(bandMeans);
        String ratio = Integer.toString(score);
        // Print values
        System.out.println(String.valueOf(ratio));

我想在react native中显示它。但当我尝试在powershell中编译应用程序时,由于cannot find symbol int score = measureConcentration(bandMeans);而收到一个错误

我做错了什么


共 (2) 个答案

  1. # 1 楼答案

    我遵循React Native docs https://facebook.github.io/react-native/docs/native-modules-android.html#callbacks创建了Android本机模块

    To expose a method to JavaScript a Java method must be annotated using @ReactMethod. The return type of bridge methods is always void. React Native bridge is asynchronous, so the only way to pass a result to JavaScript is by using callbacks or emitting events

    public class TestBridge extends ReactContextBaseJavaModule {
    
        public TestBridge(ReactApplicationContext reactContext) {
            super(reactContext);
        }
    
        @Override
        public String getName() {
            return "TestBridge";
        }
    
        @ReactMethod
        public void getString(Callback stringCallback) {
            stringCallback.invoke("Native module String");
        }
    }
    

    public class TestBridgePackage implements ReactPackage {
    
        @Override
        public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
            List<NativeModule> modules = new ArrayList<>();
    
            modules.add(new TestBridge(reactContext));
    
            return modules;
        }
    
        @Override
        public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
    
            return Collections.emptyList();
        }
    }
    

    在应用程序中插入我的包

    public class MainApplication extends Application implements ReactApplication {
    
      private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
        ...
    
        @Override
        protected List<ReactPackage> getPackages() {
          return Arrays.<ReactPackage>asList(
              new MainReactPackage(),
              new TestBridgePackage()
          );
        }
    
        ...
      };
    
      ...
    }
    

    然后用callback在React Native端获取一个字符串

    import {NativeModules} from 'react-native';
    
    export default class App extends Component<Props> {
      componentWillMount() {
        const TestBridge = NativeModules.TestBridge;
        TestBridge.getString(string => console.log(string));
      }
    }
    
  2. # 2 楼答案

    你试过了吗

    import android.util.Log;
    

    然后使用

    Log.d("first string goes here", "second string goes here");