java ждать наблюдателя, чтобы завершить - PullRequest
0 голосов
/ 09 февраля 2020

Я совершенно новичок в java asyn c функция и наблюдаем все это. Можно ли в любом случае убедиться, что функция asyn c вернулась, прежде чем продолжить? В настоящее время я использую Thread.sleep(100);, чтобы я мог получить нужные данные, но я не думаю, что это уместно.

мой код:

    private void getGroupAllInfo(CallbackContext callbackContext){
        Log.d("executing: ", "getGroupAllInfo1");
        Observable observable = GsscFactory.executeGetZwaveAllInfo(this.sock, MationPlugin.gatewayId, MationPlugin.account, MationPlugin.password);
        observable.subscribe(t -> {
            System.out.print(t);
            MationPlugin.allInfo.put("data",t.toString());
            // callbackContext.success(t.toString()); 


        });
  public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
    this.getGroupAllInfo(callbackContext);
    try{
        Thread.sleep(100);
    }catch(InterruptedException e){
        e.printStackTrace();
    }
    callbackContext.success(this.allInfo.getString("data"));
}

Я понял, что я не могу назначить переменную внутри observable.subscribe (t -> {}), поэтому я решил поместить нужные данные в объект json. Если есть какие-то альтернативы, скажите, пожалуйста. > <</p>

1 Ответ

0 голосов
/ 09 февраля 2020

Сначала создайте переменную MutableLiveData, например:

    MutableLiveData<String> response = new MutableLiveData<String>();

Затем создайте наблюдатель, который наблюдает за изменениями значения ответа, например:

    // Create the observer which updates the response when a new value arrives.
    final Observer<String> nameObserver = new Observer<String>() {
        @Override
        public void onChanged(@Nullable final String response) {
            // Update the UI like a TextView text or do whatever you want with your [response] value
            responseTextView.setText(response);
        }
    };

    // Observe the MutableLiveData, passing the observer.
    response.observe(this, nameObserver);

Затем опубликуйте новое значение в переменной ответа в ваше фоновое задание, например:

    response.postValue("response value");
...