Сетевой пейджинг с помощью pagedList в библиотеке ArchAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Сетевой пейджинг с помощью pagedList в библиотеке Arch

Сообщение Anonymous »

Android добавляет библиотеку подкачки как часть компонента архитектуры для использования нумерации страниц ресурса. Я использую этот пример, чтобы сделать это. Я пишу эти коды, но в своем DataSource.Factory я не могу вернуть полученный источник данных из сети. давайте посмотрим мои коды:

PostDataSource:

Код: Выделить всё

public class PostDataSource extends PageKeyedDataSource {

private final APIUtils api = RetrofitHelper.getInstance().create(APIUtils.class);
private final String TOKEN = TokenUtil.getCachedAuthToken();
private int page = 1;
private GeneralWebResult postList;

@Override
public void loadInitial(@NonNull LoadInitialParams params, @NonNull LoadInitialCallback callback) {

api.getMainPosts("all",10,"new",page,TOKEN).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
postList = response.body();
callback.onResult(/*return ArrayList */postList.getResult(),null, ++ page);
Log.e("RESULT",response.code()+" ");
}

@Override
public void onFailure(Call call, Throwable t) {
Log.e("ERROR",t.getLocalizedMessage());
}
});
}

@Override
public void loadBefore(@NonNull LoadParams params, @NonNull LoadCallback callback) {

}

@Override
public void loadAfter(@NonNull LoadParams params, @NonNull LoadCallback callback) {
ArrayList postList = new ArrayList();
api.getMainPosts("all",10,"new",page,TOKEN).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
postList.addAll(response.body().getResult());
callback.onResult(postList,null);
Log.e("RESULT",response.code()+" ");
}

@Override
public void onFailure(Call call, Throwable t) {
Log.e("ERROR",t.getLocalizedMessage());
}
});
}
}
PostDataSourceFactory:

Код: Выделить всё

public class PostDataSourceFactory extends DataSource.Factory {

private PostDataSource dataSource;

@Override
public DataSource create() {

return new PostDataSource();
}
}
PostViewModel:

Код: Выделить всё

public class PostViewModel extends ViewModel {
public LiveData
> liveDataSource;

public PostViewModel() {
Executor executor = Executors.newFixedThreadPool(5);
PostDataSourceFactory factory = new PostDataSourceFactory(executor);

PagedList.Config config = new PagedList.Config.Builder().setEnablePlaceholders(false)
.setInitialLoadSizeHint(10).setPageSize(10).setPrefetchDistance(4).build();

liveDataSource = (new LivePagedListBuilder(factory,config)).setFetchExecutor(executor).build();

//Log.e("LIVE DATA SOURCE", liveDataSource.getValue().get(0).getContent());

}
}
Постадаптер:

Код: Выделить всё

public class PostAdapter extends PagedListAdapter
 {

private PagedList items;

public void setItems(PagedList  items) {
this.items = items;
}

public class Holder extends RecyclerView.ViewHolder{

TextView content;
Holder(View itemView) {
super(itemView);

content = itemView.findViewById(R.id.item_post_test_content);
}

void bindTo(Post post){
content.setText(post.getContent());
}
}
PostAdapter() {
super(Post.DiffCAllback);
}

@NonNull
@Override
public PostAdapter.Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new Holder(LayoutInflater.from(parent.getContext()).inflate(R.layout.post_test_item,parent,false));
}

@Override
public void onBindViewHolder(@NonNull PostAdapter.Holder holder, int position) {
holder.bindTo(getItem(position));

}
}
MainActivity:

Код: Выделить всё

list = findViewById(R.id.home_list);
list.setLayoutManager(new LinearLayoutManager(this));
PostViewModel viewModel = ViewModelProviders.of(this).get(PostViewModel.class);

PostAdapter adapter = new PostAdapter();
viewModel.liveDataSource.observe(this,items ->{
Log.e("ITEMS SIZE",items.size()+" ");
adapter.setItems(items);
} );

list.setAdapter(adapter);
Где моя ошибка? почему PostDataSourceFactory возвращает значение null при create()?

Подробнее здесь: https://stackoverflow.com/questions/511 ... ch-library
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Сетевой пейджинг с помощью pagedList в библиотеке Arch
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать элементы в PagedList? (Библиотека подкачки компонентов Android Arch)
    Anonymous » » в форуме Android
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Пейджинг с помощью PagedList: эффективен ли он?
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Std :: fileystem :: canonical преобразует сопоставленный сетевой диск в сетевой путь
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Std :: fileystem :: canonical преобразует сопоставленный сетевой диск в сетевой путь
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»