简体   繁体   中英

How to pass an intent variable to retrofit using Android Pagination Library

I am implementing android pagination library in my app and would like to pass "id" of an item from my activity to the data source where my network call is made

AddCommentActivity.java

//I want to pass this string to the network call.
String image_id = getIntent().getStringExtra("image_id");

CommentViewModel commentViewModel = new ViewModelProvider(this).get(CommentViewModel.class);

CommentDataSource.java

public class CommentDataSource extends PageKeyedDataSource<Long, Comment> {
    public CommentDataSource(){
    progress_bar = new MutableLiveData<>();
     } 

   @Override
public void loadInitial(@NonNull final LoadInitialParams<Long> params, @NonNull final LoadInitialCallback<Long, Comment> callback) {
    RestApi restApi = RetrofitApi.create();

    Call<CommentResponse> call = restApi.getComments(FIRST_PAGE, "I want the image_id from activity here");

    call.enqueue(new Callback<CommentResponse>() {
        @Override
        public void onResponse(Call<CommentResponse> call, Response<CommentResponse> response) {

 }

CommentDataSourceFactory.java

public class CommentDataFactory extends DataSource.Factory<Long, Comment> {

public MutableLiveData<CommentDataSource> commentLiveDataSource = new MutableLiveData<>();

public CommentDataFactory() {
}

@Override
public DataSource<Long, Comment> create() {
    CommentDataSource commentDataSource = new CommentDataSource();
    commentLiveDataSource.postValue(commentDataSource);
    return commentDataSource;
}

CommentViewModel.java

public class CommentViewModel extends ViewModel {

public  LiveData<PagedList<Comment>> commentPagedList;
public  LiveData<CommentDataSource> liveDataSource;
public  LiveData progressBar;

public CommentViewModel(){
    CommentDataFactory commentDataFactory = new CommentDataFactory();
    liveDataSource = commentDataFactory.commentLiveDataSource;

    progressBar = Transformations.switchMap(liveDataSource, CommentDataSource::getProgressBar);

    PagedList.Config config = new PagedList.Config.Builder()
            .setEnablePlaceholders(false)
            .setPageSize(CommentDataSource.PAGE_SIZE)
            .build();

    commentPagedList = new LivePagedListBuilder<>(commentDataFactory, config).build();
}


public LiveData<PagedList<Comment>> getCommentData(){
    return commentPagedList;
}

public void getRefreshedData(){
    getCommentData().getValue().getDataSource().invalidate();
}
}

How to do that.? I checked Passing variable to paging library class which is exactly what I want to do but I dont understand it and the code gives errors. Errors such as

Cannot create an instance of class CommentViewModel

CommentViewModel has no zero argument constructor

Okay do:

 commentViewmodel1.getCommentData().observe(this, new Observer<PagedList<Comments>>(){
 @Override
public void onChanged(PagedList<Comment> 
    comments){
      adapter.submitList(comments);

    }
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM