Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在我的代码中使用分页,我的应用程序在滚动recyclerview时崩溃?_Android - Fatal编程技术网

Android 如何在我的代码中使用分页,我的应用程序在滚动recyclerview时崩溃?

Android 如何在我的代码中使用分页,我的应用程序在滚动recyclerview时崩溃?,android,Android,我试图在我的应用程序中显示JSON响应,该响应在我的应用程序中显示图标和标题,我使用recyclerview在cardview上垂直列出项目。但我的应用程序在向下滚动时崩溃,我在谷歌上搜索了一些它说使用分页的解决方案。我从不使用分页。帮助我 class ListSourceViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { ItemClickListener item

我试图在我的应用程序中显示JSON响应,该响应在我的应用程序中显示图标和标题,我使用recyclerview在cardview上垂直列出项目。但我的应用程序在向下滚动时崩溃,我在谷歌上搜索了一些它说使用分页的解决方案。我从不使用分页。帮助我

 class ListSourceViewHolder extends RecyclerView.ViewHolder implements 
    View.OnClickListener
    {
    ItemClickListener itemClickListener;
    TextView source_title;
    CircleImageView source_image;
    public ListSourceViewHolder(View itemView) {
        super(itemView);
        source_image=(CircleImageView)itemView.findViewById(R.id.source_image);
        source_title=(TextView) itemView.findViewById(R.id.source_name);
        itemView.setOnClickListener(this);
    }

    public void setItemClickListener(ItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    @Override
    public void onClick(View v) {
        itemClickListener.onClick(v,getAdapterPosition(),false);
    }
}
     public class ListSourceAdapter 
     extendsRecyclerView.Adapter<ListSourceViewHolder> {

    private Context context;
    private WebSite webSite;
    private IconBetterIdeaService mService;

    public ListSourceAdapter(Context context, WebSite webSite) {
        this.context = context;
        this.webSite = webSite;
        mService= Common.getIconService();
    }

    @Override
    public ListSourceViewHolder onCreateViewHolder(ViewGroup parent, int 
    viewType) {
        LayoutInflater inflater=LayoutInflater.from(parent.getContext());
        View view=inflater.inflate(R.layout.source_layout,parent,false);
        return new ListSourceViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ListSourceViewHolder holder, final int 
    position) {
     StringBuilder iconBetterAPI=new StringBuilder("https://icons.better-
    idea.org/allicons.json?url=");
        iconBetterAPI.append(webSite.getSources().get(position).getUrl());
        mService.getIconUrl(iconBetterAPI.toString()).enqueue(new 
    Callback<IconBetterIdea>() {
            @Override
            public void onResponse(Call<IconBetterIdea> call, 
    Response<IconBetterIdea> response) {

    if (response.body().getIcons().size() > 0)
     {
           Picasso.with(context).load(response.body().getIcons().get(0).getUrl()).into(holder.source_image);

                    }
                }
            @Override
            public void onFailure(Call<IconBetterIdea> call, Throwable t) {

            }
        });

    holder.source_title.setText(webSite.getSources().get(position).getName());
        holder.setItemClickListener(new ItemClickListener() {
            @Override
            public void onClick(View view, int position, boolean isLongClick) {
                Intent intent=new Intent(context, ListNews.class);
                intent.putExtra("source", 
                webSite.getSources().get(position).getId());
                intent.putExtra("sortBy", 

            webSite.getSources().get(position).getSortBysAvailable().get(0));
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);

            }
        });
    }

     @Override
    public int getItemCount() {
        return webSite.getSources().size();
    }
    }


//Here is my mainActivity
package pay4free.in.primenews;

import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.google.gson.Gson;

import dmax.dialog.SpotsDialog;
import io.paperdb.Paper;
import pay4free.in.primenews.Adapter.ListSourceAdapter;
import pay4free.in.primenews.Common.Common;
import pay4free.in.primenews.Interface.NewsService;
import pay4free.in.primenews.Model.WebSite;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class MainActivity extends AppCompatActivity {
RecyclerView listWebsite;
    RecyclerView.LayoutManager layoutManager;
    NewsService mService;
    ListSourceAdapter adapter;
    SpotsDialog Dialog;
    SwipeRefreshLayout swipeRefreshLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Paper.init(this);
        mService= Common.getNewsService();
      swipeRefreshLayout=(SwipeRefreshLayout)findViewById(R.id.swipe);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                loadWebsiteSource(true);
            }
        });
        listWebsite=(RecyclerView)findViewById(R.id.list_source);
        listWebsite.setHasFixedSize(false);
        layoutManager=new LinearLayoutManager(this);
        listWebsite.setLayoutManager(layoutManager);

        Dialog=new SpotsDialog(this);
        loadWebsiteSource(false);

    }

    private void loadWebsiteSource(boolean isRefreshed) {
if(!isRefreshed)
{
    String cache =Paper.book().read("cache");
    if(cache!=null&&!cache.isEmpty())
    {
        WebSite webSite=new Gson().fromJson(cache,WebSite.class);
        adapter=new ListSourceAdapter(getBaseContext(),webSite);
        adapter.notifyDataSetChanged();
        listWebsite.setAdapter(adapter);
    }
    else
    {
        Dialog.show();
        mService.getSources().enqueue(new Callback<WebSite>() {
            @Override
            public void onResponse(Call<WebSite> call, Response<WebSite> response) {
                adapter=new ListSourceAdapter(getBaseContext(),response.body());
                adapter.notifyDataSetChanged();
                listWebsite.setAdapter(adapter);
                Paper.book().write("cache",new Gson().toJson(response.body()));
            }

            @Override
            public void onFailure(Call<WebSite> call, Throwable t) {

            }
        });
    }
}
else
{
    Dialog.show();
    mService.getSources().enqueue(new Callback<WebSite>() {
        @Override
        public void onResponse(Call<WebSite> call, Response<WebSite> response) {
            adapter=new ListSourceAdapter(getBaseContext(),response.body());
            adapter.notifyDataSetChanged();
            listWebsite.setAdapter(adapter);

            Paper.book().write("cache",new Gson().toJson(response.body()));
            swipeRefreshLayout.setRefreshing(false);
        }

        @Override
        public void onFailure(Call<WebSite> call, Throwable t) {

        }
    });
}
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }
}
类ListSourceViewHolder扩展了RecyclerView.ViewHolder实现
View.OnClickListener
{
ItemClickListener ItemClickListener;
TextView源文件标题;
CircleImageView源图像;
公共ListSourceViewHolder(查看项目视图){
超级(项目视图);
source\u image=(CircleImageView)itemView.findViewById(R.id.source\u image);
source\u title=(TextView)itemView.findViewById(R.id.source\u name);
setOnClickListener(这个);
}
public void setItemClickListener(ItemClickListener ItemClickListener){
this.itemClickListener=itemClickListener;
}
@凌驾
公共void onClick(视图v){
onClick(v,getAdapterPosition(),false);
}
}
公共类ListSourceAdapter
extendsRecyclerView.Adapter{
私人语境;
私人网站;
私有IconBetterIdeaService mService;
公共ListSourceAdapter(上下文、网站){
this.context=上下文;
this.webSite=网站;
mService=Common.getIconService();
}
@凌驾
public ListSourceViewHolder onCreateViewHolder(视图组父级,int
视图类型){
LayoutInflater充气器=LayoutInflater.from(parent.getContext());
视图=充气机。充气(R.layout.source\u布局,父级,false);
返回新的ListSourceViewHolder(视图);
}
@凌驾
public void onBindViewHolder(最终列表SourceViewHolder,最终整型)
(职位){
StringBuilder iconBetterAPI=新的StringBuilder(“https://icons.better-
idea.org/allicons.json?url=“);
append(webSite.getSources().get(position.getUrl());
mService.getIconUrl(iconbeterapi.toString()).enqueue(新)
回调函数(){
@凌驾
公共void onResponse(调用,
回应(回应){
if(response.body().getIcons().size()>0)
{
Picasso.with(context).load(response.body().getIcons().get(0.getUrl()).into(holder.source_image)中;
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
holder.source_title.setText(webSite.getSources().get(position.getName());
setItemClickListener(新的ItemClickListener(){
@凌驾
公共void onClick(视图、int位置、布尔值isLongClick){
意向意向=新意向(上下文,ListNews.class);
intent.putExtra(“源”,
webSite.getSources().get(position.getId());
intent.putExtra(“sortBy”,
webSite.getSources().get(position.getSortByAvailable().get(0));
intent.setFlags(intent.FLAG\u活动\u新任务);
背景。开始触觉(意图);
}
});
}
@凌驾
public int getItemCount(){
返回webSite.getSources().size();
}
}
//这是我的主要活动
套餐付费4free.in.primenews;
导入android.support.v4.widget.swiperFreshLayout;
导入android.support.v7.app.AlertDialog;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入com.google.gson.gson;
导入dmax.dialog.SpotsDialog;
导入io.paperdb.Paper文件;
导入pay4free.in.primenews.Adapter.ListSourceAdapter;
导入pay4free.in.primenews.Common.Common;
导入pay4free.in.primenews.Interface.NewsService;
导入pay4free.in.primenews.Model.WebSite;
2.电话;;
2.回拨;
2.回应;;
公共类MainActivity扩展了AppCompatActivity{
RecyclerView列表网站;
RecyclerView.LayoutManager LayoutManager;
新闻服务mService;
ListSourceAdapter适配器;
SpotsDialog对话框;
SwipeRefreshLayout SwipeRefreshLayout;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
文件.init(this);
mService=Common.getNewsService();
swipeRefreshLayout=(swipeRefreshLayout)findViewById(R.id.swipe);
swipeRefreshLayout.setOnRefreshListener(新的swipeRefreshLayout.OnRefreshListener()){
@凌驾
公共void onRefresh(){
loadWebsiteSource(true);
}
});
listWebsite=(RecyclerView)findViewById(R.id.list\u来源);
listWebsite.setHasFixedSize(false);
layoutManager=新的LinearLayoutManager(此);
setLayoutManager(layoutManager);
对话框=新点对话框(此);
loadWebsiteSource(false);
}
私有void loadWebsiteSource(布尔值isRefreshed){
如果(!isRefreshed)
{
字符串缓存=Paper.book().read(“缓存”);
if(cache!=null&&!cache.isEmpty())
{
WebSite=new Gson().fromJson(缓存,WebSite.class);
adapter=新的ListSourceAdapter(getBaseContext(),网站);
adapter.notifyDataSetChanged();
setAdapter(adapter);
}
其他的
{
Dialog.show();
mService.getSources().enqueue(新回调()命令){
@凌驾
公共void onResponse(调用、响应){
adapter=newlistsourceadapter(getBaseContext(),response.body());
adapter.notifyDataSetChanged();
setAdapter(adapter);
write(“缓存”,new Gson().toJson(response.body());
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
adapter=new ListSourceAdapter(getBaseContext(),response.body());
adapter.notifyDataSetChanged();
listWebsite.setAdapter(adapter);
adapter.yourMethodToUpdate(response.body());
adapter.notifyDataSetChanged();