首页 > 解决方案 > 为什么 Observable.create() 在单击时不起作用?

问题描述

在我的应用程序中,我在 menuitemclicked 中添加了 Observable 方法,但是当我单击它两次时它正在工作。单按。方法不起作用,但按钮工作正常对此的任何建议或方法的任何更改。

case R.id.upload:

fetch() 中断;

io.reactivex.Observable fetchObservable() {

return io.reactivex.Observable.create(new ObservableOnSubscribe<Data>() {
    @Override
    public void subscribe(ObservableEmitter<Data> emitter) throws Exception {


        try {


            final Cursor cursor = getActivity().getContentResolver().query(android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[]{"display_name", "data1"}, null, null, null);


            //  final Map contact =new HashMap();


            while (cursor.moveToNext()) {

                Data data = new Data();


                try {

                    String name = cursor.getString(cursor.getColumnIndex(Display_name));
                    String number = cursor.getString(cursor.getColumnIndex(Data1));
                    data.setContact_name(name);
                    data.setNumber(number);

                    Thread.sleep(60);

                    emitter.onNext(data);

                } catch (Exception e) {

                    Toast.makeText(context, "not insert , Toast.LENGTH_SHORT).show();
                }
            }

            emitter.onComplete();
        }catch (Exception e){

            emitter.onError(e);
        }

        }


});

// 获取方法代码

void fetch(){

fetchObservable().subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onSubscribe(Disposable d) {

      }

      @Override
      public void onNext(Data data) {


          data.Contact_name=data.getContact_name();
          data.number=data.getNumber();


              String name=  data.Contact_name;
              String number=   data.number;





          }




              count++;
              textprogress.setText(String.valueOf(count));







          }

      }

      @Override
      public void onError(Throwable e) {

      }

      @Override
      public void onComplete() {

      }
  });

}

标签: androidandroid-studiorx-android

解决方案


因为你没有像这样在主线程中运行你的 UI

new Handler(Looper.getMainLooper()).post(new Runnable() {
                 @Override
                 public void run() {

                     textprogress.setVisibility(View.VISIBLE);
                     textprogress.setVisibility(View.VISIBLE);

                 }
             });

推荐阅读