RxJava2 успех всегда вызывается дважды - PullRequest
0 голосов
/ 16 января 2019

Я реализую архитектуру MVP с Retrofit и RxJava2 (с RxAndroid). У меня есть следующие настройки

NetworkInterface.java, где находятся вызовы для модернизации

public interface NetworkInterface {
    @GET("/input")
    Single<List<InformationData>> getInfoData();
}

InformationDataDao.java Уровень доступа к данным для информационных данных

@Dao
public interface InformationDataDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    Completable createInfoData(List<InformationData> infoData);
}

MainPresenter.java, где звонки делаются общедоступным классом MainPresenter {

    public MainPresenter() {

    }

    // Method called to initialize the subscription
    @Override
    public void subscribe() {
        this.collectInfoData();
    }

    private void collectInfoData() {
        Single<List<InformationData>> singleInfoData = networkInterface.getInfoData()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread());

        singleInfoData.subscribe(informationDatas -> {
            InformationDataDao informationDataDao = database.informationDataDao();
            informationDataDao.createInfoData(informationDatas);

            // What made me detect that this was being called twice
            Log.d(Constant.LOG_TAG, "Info Data: " + informationDatas.size());

            // Rest of the code here
        }, Throwable::printStackTrace);
    }
}

SplashActivity.java Метод, который вызывает докладчик

public class SplashActivity extends AppCompatActivity {

    // Helps in getting the location
    private FusedLocationProviderClient locationClient;

    private SplashPresenter mPresenter;

    @Override
    protected void onCreate(Bundle savedInstance) {
        super.onCreate(savedInstance);
        setContentView(R.layout.activity_splash);

        mPresenter = new SplashPresenter();
    }

    @Override
    protected void onResume() {
        super.onResume();

        // These three lines ensure that you have the appropriate permissions to proceed. In the third line for instance, the user will be navigated out to the settings pane to turn on location.
        // When he/she returns to the activity, the onResume is called so I'm assuming that's the best place to start the presenter
        this.ensureHasPermissions();
        boolean isGoogleServiceAvailable = this.ensureGoogleServiceAvailability();
        boolean isLocationServiceAvailable = this.ensureLocationServiceAvailable();

        if (isLocationServiceAvailable && isGoogleServiceAvailable) {
            locationClient.getLastLocation()
                    .addOnSuccessListener(this, location -> {
                        // Set the closest location and subscribe
                        presenter.setClosestLocation(location);
                        presenter.subscribe();
                    })
                    .addOnFailureListener(this, Throwable::printStackTrace);
        }
    }
}

Начиная с SplashPresenter.java, журнал печатается дважды, указывая, что полный обратный вызов был вызван дважды. Есть ли идея, почему это может быть так? Я довольно новичок в RxJava2 и буду очень благодарен за отзыв.

Спасибо.

...