房间LiveData onChange调用太快了。许多活动堆积在上面

时间:2017-12-29 14:46:59

标签: java android retrofit android-room

@Dao
public interface LibraryCoverContentDao {

    @Query("SELECT * FROM LibraryCoverContent where rush_id = :rush_id")
    LiveData<List<LibraryCoverContent>> getContentsFromRushID(String rush_id);

    @Query("DELETE FROM library_cover where rush_id = :rush_id")
    void deleteContentsFromRushID(String rush_id);

    @Insert(onConflict = REPLACE)
    void insertCoverContents(LibraryCoverContent... contents);

}

我想在列表LiveData&gt;后打开另一个活动mLibraryCoverContents不为null。

我将从改装调用中下载的项目逐个插入到房间数据库中,显然,我对下一个活动的startActivity()调用多次发生,并且在此活动上打开了多个相同的活动。

我只想在改装调用的所有项目都插入数据库后调用onChanged,只需要一个活动。

请参阅以下相关代码以供参考:

public void openReadRushScreen(final int index) {
        int count = mCoversList.size();
        if(count > index){
            mRushIDContent = mLibraryContentRepository.getContentsFromID(mCoversList.get(index).getRush_id());
            mRushIDContent.observe(this, new Observer<List<LibraryCoverContent>>() {
                @Override
                public void onChanged(@Nullable List<LibraryCoverContent> libraryCoverContents) {
                    Toast.makeText(getActivity(), "ON CHANGED", Toast.LENGTH_SHORT).show();
                    if(libraryCoverContents!=null && libraryCoverContents.size()>0){
                        mRushIDContentsList = libraryCoverContents;
                        if(mRushIDContentsList.size()>0 && mRushIDContentsList.get(0).getRush_id().equals(mCoversList.get(index).getRush_id())){
                            mRushIDContentsList = new ArrayList<>();
                            startActivity(ReadRushActivity.getStartIntent(getActivity(), mCoversList.get(index).getRush_id(),
                                    mCoversList.get(index).isRush_audio(),
                                    mCoversList.get(index).getTitle()));
                        }
                    }
                    else {
                        if(mCoversList!=null && mCoversList.size()>index) getContent(mCoversList.get(index).getRush_id());
                    }
                }
            });
        }
        else Toast.makeText(getActivity(), "Empty Cover", Toast.LENGTH_SHORT).show();
    }
public void getContent(String mRushId) {
        mApiService = ApiClient.getClient().create(ApiInterface.class);
        Call<List<Content>> call = mApiService.getRushContent(mRushId);
        if(call!=null){
            call.enqueue(new Callback<List<Content>>() {
                @Override
                public void onResponse(@NonNull Call<List<Content>> call, @NonNull Response<List<Content>> response) {
                    mContents = response.body();
                    if(mContents!=null && mContents.size()>0){
                        //noinspection ConstantConditions
                        List<LibraryCoverContent> coverContent = new ArrayList<>();
                        for(int i=0; i<mContents.size(); i++){
                            coverContent.add(new LibraryCoverContent
                                    (mContents.get(i).getContent_id(), mContents.get(i).getRush_id(),
                                            mContents.get(i).getContent(), mContents.get(i).getAttr(),
                                            mContents.get(i).getDatetime(), mContents.get(i).getPage_no()));
                        }
                        mLibraryContentRepository.insertContentItems(coverContent);
                    }
                }

                @Override
                public void onFailure(@NonNull Call<List<Content>> call, @NonNull Throwable t) {
//                    if(getActivity()!=null) Toast.makeText(getActivity(), "Network Error while downloading rush content", Toast.LENGTH_LONG).show();
                }
            });
        }
    }
    @SuppressLint("StaticFieldLeak")
    public void insertContentItems(final List<LibraryCoverContent> items) {
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... voids) {
                for(int i=0; i<items.size(); i++){
                    mLibraryCoverContentDao.insertCoverContents(items.get(i));
                }
                return null;
            }
        }.execute();
    }

0 个答案:

没有答案