android - 为什么 Observable.create() 在单击时不起作用?

标签 android android-studio rx-android

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

case R.id.upload:

获取() 休息;

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() { @覆盖 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() {

      }
  });

最佳答案

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

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

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

                 }
             });

关于android - 为什么 Observable.create() 在单击时不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52351705/

相关文章:

java - 如何避免类型转换?

android - 为什么存在 Google maven 存储库,我应该在什么时候使用它?

android - BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED : and revalidation of the purchase

android - 何时取消订阅

iphone - 像 iPhone 一样从浏览器自动启动 Android 中的视频播放器

android - SearchView on support.v7.appcompat 库问题 : default 9-patch background not renders properly

java - 在 android 中使用 Json 对象文件创建数组列表

java - 无法为可滑动的标签滑动

java - RxJava + 改造 + 轮询

java - 使用另一个 Observable<List<AnotherObject>> 过滤 Observable<List<Object>>