如何解决在 Scroll RecycleView 上加载下一篇文章时出错
我非常需要你的帮助,我已经研究了一个多星期仍然找不到解决方案。帖子我可以看到帖子的详细信息,但是当我滚动以获取更多帖子时,我可以看到带有特色图片的帖子,但是当我点击它时,我看到了这个错误:
resource "type" "name" {
count = CONDITION : 1 ? 0
}
这就是我如何在滚动上获得更多帖子
Caused by: java.lang.indexoutofboundsexception: Index: 10,Size: 10
at java.util.ArrayList.get(ArrayList.java:437)
at com.punjabidharti.myapplication.PostDetails.onCreate(PostDetails.java:30)
这就是我从改造中获取数据的方式:我使用动态网址
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView,int newState) {
super.onScrollStateChanged(recyclerView,newState);
}
@Override
public void onScrolled(RecyclerView recyclerView,int position,int dy) {
if (dy > 0) { //check for scroll down
visibleItemCount = mLayoutManager.getChildCount();
totalItemCount = mLayoutManager.getItemCount();
pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition();
if (loading) {
if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) {
loading = false;
Log.v("...","Last Item Wow !");
// Do pagination.. i.e. fetch new data
yourURL = "https://punjabidharti.com/wp-json/wp/v2/posts/?categories=4514&page=2";
getRetrofit();
loading = true;
}
}
}
}
});
这是适配器中的 bindviewholder
public void getRetrofit(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseURL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitArrayApi service = retrofit.create(RetrofitArrayApi.class);
String yourURl = yourURL.replace(baseURL,"");
Call<List<WPPost>> call = service.getPostInfo( yourURl);
call.enqueue(new Callback<List<WPPost>>() {
@Override
public void onResponse(Call<List<WPPost>> call,Response<List<WPPost>> response) {
Log.e("mainactivyt"," response "+ response.body());
mListPost = response.body();
progressBar.setVisibility(View.GONE);
if (response.body() != null) {
for (int i = 0; i < response.body().size(); i++) {
Log.e("main "," title " + response.body().get(i).getTitle().getRendered() + " " +
response.body().get(i).getId());
String tempdetails = response.body().get(i).getExcerpt().getRendered().toString();
tempdetails = tempdetails.replace("<p>","");
tempdetails = tempdetails.replace("</p>","");
tempdetails = tempdetails.replace("[…]","");
list.add(new Model(Model.IMAGE_TYPE,response.body().get(i).getTitle().getRendered(),tempdetails,response.body().get(i).getLinks().getWpAttachment().get(0).getHref()));
}
progressBar.setVisibility(View.GONE);
} else {
progressBar.setVisibility(View.GONE);
}
adapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<List<WPPost>> call,Throwable t) {
}
});
这是 PostDetails 类
public void onBindViewHolder(final RecyclerView.ViewHolder holder,final int position) {
final Model object = dataset.get(position);
( (ImageTypeViewHolder) holder).title.setText( object.title );
( (ImageTypeViewHolder) holder).subtitle.setText( object.subtitle );
Glide.with(mContext)
.load(object.Image)
.dontAnimate()
.placeholder(R.drawable.icon)
.into(((ImageTypeViewHolder) holder).imageView);
( (ImageTypeViewHolder) holder).title.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext,PostDetails.class);
intent.putExtra("itemPosition",position);
mContext.startActivity(intent);
}
});
( (ImageTypeViewHolder) holder).subtitle.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext,position);
mContext.startActivity(intent);
}
});
( (ImageTypeViewHolder) holder).imageView.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext,position);
mContext.startActivity(intent);
}
});
/// dataset.get(position)
}
我在调试中发现了这个错误:
请帮忙
解决方法
您是说列表中的 10 项显示没有任何问题。从 0 到 9 的索引似乎已满。但是,当您尝试访问索引 10 时,您将收到 IndexOutOfBoundsException。
在这种情况下,您的列表中不能超过 10 个项目。因此,您的列表可能无法正确加载。请首先检查您正在使用 list.get() 方法的列表的目录。如下:
if (index < myList.size()) (
// there is a index
} else {
// index does not exist
}
可以在“else”步骤中添加日志,查看错误在哪里。
我认为您可以将示例中的库用于您尝试使用的结构。我之前没有使用过这个库,我不承担任何责任。我推荐你的研究。 https://github.com/pwittchen/InfiniteScroll
你也可以试试下面的代码吗?否则我建议调试 OnCreate 方法,以防代码在你的人身上工作。
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.post);
this.title = (TextView) findViewById(R.id.title);
WebView webview = (WebView)this.findViewById(R.id.postwebview);
webview.getSettings().setJavaScriptEnabled(true);
Intent i = getIntent();
int position = i.getExtras().getInt("itemPosition");
if (position < MainActivity.mListPost.size()) {
WPPost post = MainActivity.mListPost.get(position);
title.setText(Html.fromHtml(post.getTitle().getRendered()));
String data = String.valueOf((Html.fromHtml(post.getContent().getRendered())));
webview.loadData(data,"text/html; charset=utf-8","UTF-8");
} else {
Log.e("PostDetails","No index. List size: " + MainActivity.mListPost.size());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。