如何获得所有 GitHub API 结果?

How to get all GitHub API results?

我使用 GitHub 搜索 API 进行存储库搜索。我知道如何从第 3、4 等页面得出结果。 (https://api.github.com/search/repositories?q=java&page=2&per_page=30>)。为此,我在代码中使用了这种方法:


      private void pagesPagination() {
            recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                    super.onScrolled(recyclerView, dx, dy);
                    if (!recyclerView.canScrollVertically(1) && dy != 0) {
                        if (layoutManager.findLastCompletelyVisibleItemPosition() ==
                                adapter.getItemCount() - 1) {
                          page++;
                     itemViewModel.searchItems(q, page, resultsPerPage);
                        itemViewModel.getNewItem().observe(MainActivity.this, responseObject -> {
                            adapter.addItems(responseObject.get(0).getItems());
                        });
                        }
                    }
                }
            });
        }
    }

 public class ItemViewModel extends AndroidViewModel {

    private ItemRepository itemRepository;
    private LiveData<Root> itemsResponseLiveData;
    private List<Root> items;
    private MutableLiveData<List<Root>> addedItems;

    public ItemViewModel(@NonNull Application application) {
        super(application);
    }

    public void init() {
        itemRepository = new ItemRepository();
        itemsResponseLiveData = itemRepository.getItemsResponseLiveData();
        items = new ArrayList<>();
        addedItems = new MutableLiveData<List<Root>>();
    }

    public Root addItem() {
     return itemsResponseLiveData.getValue();
    }

    public void searchItems(String q, int page, int resultsPerPage) {
        itemRepository.fetchData(q, page, resultsPerPage);
        items.add(addItem());
        addedItems.setValue(items);
    }

    public LiveData<Root> getItemsResponseLiveData() {
        return itemsResponseLiveData;
    }
    public MutableLiveData<List<Root>> getNewItem(){
        return addedItems;
    }
}

在适配器中 class:

public void addItems(List<Item> newItem ) {
    items.addAll(newItem);
    notifyDataSetChanged();
}

但是如果我向下滚动这个新列表,我看不到以前的结果。我可以看到之前所有页面的所有结果吗?

您的问题可能在于您如何在 ViewModel 中使用 LiveData,

如果您使用 liveData.setValue(newList) 这将不会附加新项目,相反,它只会将值设置为新列表,

在您的情况下,您可能需要将旧项目保存在 ArrayList 中,一旦获得新项目,首先将它们附加到 ArrayList 中,然后使用 liveData.setValue(arrayList) 将所有项目放入 liveData 中,适配器将从中接收所有物品

查看此答案,您将找到有关此解决方案的更多信息和代码

Notify Observer when item is added to List of LiveData