Как вызвать строку Java в React Native и отобразить ее в реальном времени - PullRequest
0 голосов
/ 03 сентября 2018

Я создал строку в 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));

Я хотел бы отобразить его в реагировать на родной Но когда я пытаюсь скомпилировать приложение в powershell, я получаю сообщение об ошибке из-за cannot find symbol int score = measureConcentration(bandMeans);.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Вы пробовали

import android.util.Log;

, а затем с помощью

Log.d("first string goes here", "second string goes here");
0 голосов
/ 03 сентября 2018

Я следовал документам React Native https://facebook.github.io/react-native/docs/native-modules-android.html#callbacks, чтобы создать собственный модуль Android.

Чтобы предоставить метод JavaScript, метод Java должен быть аннотирован с помощью @ReactMethod. Возвращаемый тип методов моста всегда void. Собственный мост React является асинхронным, поэтому единственный способ передать результат в JavaScript - использовать обратные вызовы или отправлять события

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();
    }
}

вставить мой пакет в MainApplication

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()
      );
    }

    ...
  };

  ...
}

А затем получить строку на стороне 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));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...