代码之家  ›  专栏  ›  技术社区  ›  Devesh Agrawal

不使用订阅的结果。-rx java安卓

  •  0
  • Devesh Agrawal  · 技术社区  · 6 年前

    这是我的代码片段。

    @Override
    public void onDestroy() {
        super.onDestroy();
        disposableSingleObserver.dispose();
    }
    
    /**
     * fetches json by making http calls
     */
    private void fetchContacts() {
    
    
        disposableSingleObserver = new DisposableSingleObserver<List<Contact>>() {
            @Override
            public void onSuccess(List<Contact> movies) {
                //Toast.makeText(getActivity(), "Success", Toast.LENGTH_SHORT).show();
                contactList.clear();
                contactList.addAll(movies);
                mAdapter.notifyDataSetChanged();
    
                // Received all notes
            }
    
            @Override
            public void onError(Throwable e) {
                // Network error
            }
        };
    
        // Fetching all movies
        apiService.getContacts()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(disposableSingleObserver);
    }
    

    我收到一个警告,订阅结果不可用。

    解决这个问题的正确方法是什么?

    1 回复  |  直到 6 年前
        1
  •  8
  •   Sandip Fichadiya    6 年前

    当你使用 subscribeWith() ,它返回 Disposable 如果需要,可以随时通过它来处理订阅。这样就不需要创建一个一次性文件来将其存储在变量中,以便以后处理。你可以这样做:

    // Declare global disposable variable
    private CompositeDisposable mDisposable = new CompositeDisposable();
    
    // Then add the disposable returned by subscribeWith to the disposable
    mDisposable.add(apiService.getContacts()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeWith(disposableSingleObserver));
    

    在任何时候,如果您想取消API调用,那么您可以像onDestroy()中那样简单地调用 mDisposable.clear();

    或者

    更类似于你现在的做法:(注意 订阅() 直接分配给 disposableSingleObserver 变量

    disposableSingleObserver = apiService.getContacts()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableSingleObserver<List<Contact>>() {
                    @Override
                    public void onSuccess(List<Contact> movies) {
                        //Toast.makeText(getActivity(), "Success", Toast.LENGTH_SHORT).show();
                        contactList.clear();
                        contactList.addAll(movies);
                        mAdapter.notifyDataSetChanged();
    
                        // Received all notes
                    }
    
                    @Override
                    public void onError(Throwable e) {
                       // Network error
                    }
             });
    

    把它扔进 onDestroy 就像你现在所做的:

    @Override
    public void onDestroy() {
        super.onDestroy();
        disposableSingleObserver.dispose();
    }