我正面临“未连接适配器;跳过布局"错误 [英] I am facing "No adapter attached; skipping layout" error

查看:122
本文介绍了我正面临“未连接适配器;跳过布局"错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我写问题的标题时,此站点向我推荐了一些答案,但是找不到我的答案,这就是为什么我要写一个新的答案.我正在尝试简单的RecyclerView并成功运行,但是当我使用凌空库从互联网上获取数据时,我会遇到此错误

When I am writing the title of my question, then this site recommends me some answer but I can't find my answer that's why I am writing a new one. I am trying simple RecyclerView and it's run successfully but when I am fetching data from internet using volley library then I face this error

这是我的代码

BusinessActivity.java

BusinessActivity.java

public class BusinessActivity extends AppCompatActivity {

    private final String URL = "https://api.myjson.com/bins/a44ec";
    private JsonArrayRequest request;
    private RequestQueue requestQueue;
    private List<ArticleModel> articleList;
    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_business);

        articleList = new ArrayList<>();
        recyclerView = findViewById(R.id.business_recyclerView);
        jsonParse();
    }

    private void jsonParse() {

        request = new JsonArrayRequest(URL, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {

                JSONObject jsonObject = null;
                for (int i=0;i<response.length();i++){

                    try {
                        jsonObject = response.getJSONObject(i);
                        ArticleModel article = new ArticleModel();
                        article.setTitle(jsonObject.getString("title"));
                        article.setAuthor(jsonObject.getString("author"));
                        article.setDescription(jsonObject.getString("description"));
                        article.setPublishedAt(jsonObject.getString("publishedAt"));
                        article.setUrlToImage(jsonObject.getString("urlToImage"));
                        articleList.add(article);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
                setRecyclerView(articleList);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });

        requestQueue = Volley.newRequestQueue(BusinessActivity.this);
        requestQueue.add(request);
    }

    private void setRecyclerView(List<ArticleModel> articleList) {

        BusinessAdapter adapter = new BusinessAdapter(articleList,this);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(adapter);
    }
}

BusinessAdapter.java

BusinessAdapter.java

 public class BusinessAdapter extends RecyclerView.Adapter<BusinessAdapter.MyViewHolder> {

    private List<ArticleModel> articleModels;
    private Context context;
    RequestOptions options;

    public BusinessAdapter(List<ArticleModel> articleModels, Context context) {
        this.articleModels = articleModels;
        this.context = context;

        options = new RequestOptions().centerCrop().placeholder(R.drawable.ic_launcher_background).error(R.drawable.ic_launcher_background);
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.category_row,parent,false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        ArticleModel articleModel = articleModels.get(position);

        holder.title.setText(articleModel.getTitle());
        holder.author.setText(articleModel.getAuthor());
        holder.desc.setText(articleModel.getDescription());
        holder.date.setText(articleModel.getPublishedAt());

        Glide.with(context).load(articleModel.getUrlToImage()).apply(options).into(holder.image);
    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {

        TextView title,author,desc,date;
        ImageView image;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            title = itemView.findViewById(R.id.title);
            author = itemView.findViewById(R.id.author);
            desc = itemView.findViewById(R.id.detail);
            date = itemView.findViewById(R.id.date);
            image = itemView.findViewById(R.id.image);
        }
    }
}

错误日志

2020-04-01 00:15:53.117 8821-8821/com.atc.newsappproject E/RecyclerView: No adapter attached; skipping layout
2020-04-01 00:15:53.118 1752-1787/? E/storaged: getDiskStats failed with result NOT_SUPPORTED and size 0

我该如何解决?

谢谢.

推荐答案

在创建片段或活动时未设置RecyclerView时,通常会发生此错误.要解决此问题,您需要:

This error usually happens when you don't set the RecyclerView when you create your Fragment or Activity. To fix this you need to:

  1. onCreate中设置您的RecyclerView,而不是在获取结果时.您将其设置为空列表.
  1. Set your RecyclerView in onCreate instead of when you pick up result. You set it with an empty list.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_business);

    articleList = new ArrayList<>();
    recyclerView = findViewById(R.id.business_recyclerView);
    setRecyclerView(articleList);
    jsonParse();
}

  1. 您在Adapter
  2. 中创建一个二传手
  1. You create a setter in your Adapter

public void setArticles(ArrayList<ArticleModel> articles){

    this.articles = articles;
    notifyDataSetChanged();
}

  1. private RecyclerView recyclerView;

最后在您的onResponse中,您呼叫adapter.setArticles(articlesList);

Finally in your onResponse you call adapter.setArticles(articlesList);

如果您仍然遇到问题,这里有很多解决方案的链接: recyclerview否连接适配器;跳过布局

Here is a link with a lot of solutions if you still got issue: recyclerview No adapter attached; skipping layout

这篇关于我正面临“未连接适配器;跳过布局"错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆