gpt4 book ai didi

java - 如何确保在显示来自 api 的无限数据时不会出现 NullPointerException。

转载 作者:行者123 更新时间:2023-12-01 09:03:25 24 4
gpt4 key购买 nike

我正在从 api 获取数据并将它们显示到 recyclerview 中。

我正在使用InfiniteScroll在滚动时加载更多数据。

如果我平滑滚动,它工作正常,但如果我快速滚动,我会得到 NullPointerException,因为即使在检查 Adapter 类中的模型数据是否不为空之后,也没有按时获取数据。

如何避免这种情况?

请找到下面的代码:

 @NonNull
private InfiniteScrollListener createInfiniteScrollListener() {
return new InfiniteScrollListener(10, linearLayoutManager) {
@Override public void onScrolledToEnd(final int firstVisibleItemPosition) {
offset += 10;

final List<Purchase2> itemsLocal = loadMore(offset);
refreshView(recyclerView, new PurchaseMainTestAdapter(itemsLocal, R.layout.list_orders_layout, getApplicationContext(), emptyView), firstVisibleItemPosition);
}
};
}

private List<Purchase2> loadMore(int index){
progressBar.setVisibility(View.VISIBLE);
//add loading progress view
purchases.add(new Purchase2());
adapter.notifyItemInserted(purchases.size()-1);

OneViewApi apiService =
ApiClient.getClient().create(OneViewApi.class);
Call<Orders> call;
call = apiService.getPurchaseData(auth_token,index,10);
Log.d("Called url is:", call.request().url().toString());
call.enqueue(new Callback<Orders>() {
@Override
public void onResponse(Call<Orders> call, Response<Orders> response) {
if(response.isSuccessful()){

//remove loading view
purchases.remove(purchases.size()-1);

List<Purchase2> result = response.body().getPurchases();
if(result.size()>0){
//add loaded data
purchases.addAll(result);
}else{//result size 0 means there is no more data available at server
adapter.setMoreDataAvailable(false);

Toast.makeText(getApplicationContext(),"No More Data Available",Toast.LENGTH_LONG).show();
}

progressBar.setVisibility(View.GONE);
//should call the custom method adapter.notifyDataChanged here to get the correct loading status
}else{
Log.e("Item list"," Load More Response Error "+String.valueOf(response.code()));
}
}

@Override
public void onFailure(Call<Orders> call, Throwable t) {
Log.e("Item list"," Load More Response Error "+t.getMessage());
}
});
return purchases;
}

最佳答案

首先使用try{} catch{},然后通过断点跟踪代码以明确发生异常的位置

但我猜这里发生了异常:purchases.remove(purchases.size()-1); 你的列表为空,并且你正在尝试删除一个项目。(第一次)或关于添加和删除项目。

但是为了检测显示负载是否更多,您可以将 null 添加到 购买列表,然后在适配器中处理它 - 这太好了

关于java - 如何确保在显示来自 api 的无限数据时不会出现 NullPointerException。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41487729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com