为什么Observable.create()不能单击?

问题描述 投票:1回答:1

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

case R.id.upload:

fetch()break;

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() {

      }
  });

}

android android-studio rx-android
1个回答
1
投票

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

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

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

                 }
             });
© www.soinside.com 2019 - 2024. All rights reserved.