Как я могу установить связь между модернизацией и RxJava в разных классах? - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть несколько классов в качестве докладчика, и в этих классах я использую модификацию для некоторых методов. Но некоторые методы дублируются. Поэтому я хочу использовать класс для всех модификаций, подключаться к серверным методам и вызывать их, когда захочу. Но когда я создал этот класс, у него есть ошибка NullpointerException

Я буду очень благодарен, если вы мне поможете

это коды докладчика:

public class DefinitionPresenter implements DefinitionContract.Presenter {
    private KalaBeanDataSource kalaBeanDataSource;
    private DefinitionContract.View view;
    private CompositeDisposable compositeDisposable = new CompositeDisposable();
    private DatabaseMethods databaseMethods;
    private ActivityKindList activityKindList;

    public DefinitionPresenter(KalaBeanDataSource kalaBeanDataSource){
        this.kalaBeanDataSource = kalaBeanDataSource;
        databaseMethods = new DatabaseMethods(kalaBeanDataSource,compositeDisposable);
        activityKindList = new ActivityKindList();
    }


    @Override
    public void attachView(DefinitionContract.View view) {
        this.view = view;
    }

    @Override
    public void detachView() {
        view = null;
        if(compositeDisposable != null && compositeDisposable.size() > 0){
            compositeDisposable.clear();
        }
    }


    @Override
    public void activityKind() {
        activityKindList = databaseMethods.getActivityKind();
        if(activityKindList.getItems().size() > 0){
            view.getActivityKind(activityKindList);
        }else{
            view.showMessage(databaseMethods.message);
        }
    }

}

И это классчто я создал для получения данных с сервера с модернизацией и RxJava

public  class DatabaseMethods {
    private KalaBeanDataSource kalaBeanDataSource;
    private CompositeDisposable compositeDisposable;
    private ActivityKindList activityKindListResult;
    public String message = null;


    public  DatabaseMethods(KalaBeanDataSource kalaBeanDataSource,CompositeDisposable compositeDisposable){
        this.kalaBeanDataSource = kalaBeanDataSource;
        this.compositeDisposable = compositeDisposable;
        activityKindListResult = new ActivityKindList();
    }

    public  ActivityKindList getActivityKind(){
        kalaBeanDataSource.getActivityKind().subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver<ActivityKindList>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                            compositeDisposable.add(d);

                    }

                    @Override
                    public void onSuccess(ActivityKindList activityKindList) {
                        activityKindListResult = activityKindList;
                    }

                    @Override
                    public void onError(Throwable e) {
                        message = e.toString();
                    }
                });

        if(message == null && activityKindListResult.getItems().size() > 0){
            return activityKindListResult;
        }else{
            return null;
        }
    }

1 Ответ

0 голосов
/ 03 ноября 2019

этот метод всегда возвращает нуль:

 public  ActivityKindList getActivityKind(){
    kalaBeanDataSource.getActivityKind().subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new SingleObserver<ActivityKindList>() {
                @Override
                public void onSubscribe(Disposable d) {

                        compositeDisposable.add(d);

                }

                @Override
                public void onSuccess(ActivityKindList activityKindList) {
                    activityKindListResult = activityKindList;
                }

                @Override
                public void onError(Throwable e) {
                    message = e.toString();
                }
            });

    if(message == null && activityKindListResult.getItems().size() > 0){
        return activityKindListResult;
    }else{
        return null;
    }
}

1) делает этот метод недействительным

2) создает интерфейс и вызывает его в onSuccess() и onError()

3) реализовать интерфейс в презентаторе

...