android - 当我在回收器 View 中显示数据时出错 :RecyclerView: No adapter attached; skipping layout

标签 android mysql database listview

我正在尝试从我的 mysql 数据库获取数据并将它们显示在 ListView 中,但问题是 ListView 仅显示一个属性,而对于其他属性,我有一个错误:RecyclerView:没有附加适配器;跳过布局

这是我的适配器:

public class DerpAdapter extends RecyclerView.Adapter<DerpAdapter.DerpHolder>{

    private List<ListItem> ListData;
    private LayoutInflater inflater;

    private ItemClickCallback itemClickCallback;

    public interface ItemClickCallback{
        void onItemClick(int p);
        void onSecondaryIconClick(int p);
    }

    public void setItemClickCallback(final ItemClickCallback itemClickCallback){
        this.itemClickCallback = itemClickCallback;
    }


    public DerpAdapter(List<ListItem> listData, Context c){
        this.inflater = LayoutInflater.from(c);
        this.ListData = listData;
    }
    @Override
    public DerpHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.custom_row,parent,false);
        return new DerpHolder(view);
    }

    @Override
    public void onBindViewHolder(DerpHolder holder, int position) {

        ListItem item = ListData.get(position);
        holder.title.setText(item.getTitle());
        holder.subtitle.setText(item.getSubtitle());
        holder.gaga.setText(item.getGaga());

    }

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

    class DerpHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        private TextView title;
        private TextView subtitle;
        private TextView gaga;


        public DerpHolder(View itemView) {
            super(itemView);

            title = (TextView) itemView.findViewById(R.id.lbl_item_text);
            subtitle = (TextView) itemView.findViewById(R.id.lbl_item_sub_title);
            gaga = (TextView) itemView.findViewById(R.id.gaga);


        }

        @Override
        public void onClick(View view) {
          /*  if(view.getId() == R.id.cont_item_root){

            }else{

            }*/

        }
    }

这是我的列表项:

public class ListItem {

    private String title;
    private String subtitle;
    private String gaga;

    public String getGaga() {
        return gaga;
    }

    public void setGaga(String gaga) {
        this.gaga = gaga;
    }

    public ListItem(String title, String subtitle, String gaga) {
        this.title = title;
        this.subtitle = subtitle;
        this.gaga = gaga;
    }

    public void setSubtitle(String subtitle) {
        this.subtitle = subtitle;
    }



    public String getSubtitle() {
        return subtitle;
    }



    public void setTitle(String title) {
        this.title = title;
    }



    public String getTitle() {
        return title;
    }

最后这是我的主要 Activity :

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private DerpAdapter adapter;
    private final String url_Data = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    List<ListItem> data ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.drawarlist);

        //Layout Manager: GridLayoutManager or StaggerdeGridLayoutManager

        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        //adapter = new DerpAdapter(DerpData.getListData(), this);
        recyclerView.setAdapter(adapter);


        loadData();
    }


    public void loadData(){
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Loading Data");
        progressDialog.show();

        StringRequest stringRequest = new StringRequest(Request.Method.GET, url_Data,
                new Response.Listener<String>() {

                    @Override
                    public void onResponse(String response) {
                        progressDialog.dismiss();
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            JSONArray array = jsonObject.getJSONArray("soucat");
                            data = new ArrayList<>();
                            for (int i = 0; i < array.length(); i++){
                                JSONObject o = array.getJSONObject(i);

                                ListItem item = new ListItem(o.getString("soucat"),"hello","fefe");
                                data.add(item);
                            }

                            adapter = new DerpAdapter(data,getApplicationContext());
                            recyclerView.setAdapter(adapter);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }

最佳答案

首先,适配器变量的初始设置被注释掉:

//adapter = new DerpAdapter(DerpData.getListData(), this);
recyclerView.setAdapter(adapter);

这将始终将适配器设置为 null,您需要将其更改为:

adapter = new DerpAdapter(DerpData.getListData(), this);
recyclerView.setAdapter(adapter);

此外,我没有看到启动 Volley RequestQueue 的调用,请确保在添加 stringRequest 之前调用 requestQueue.start(); 。 然后验证用于设置适配器的代码是否正在执行。您可能总是会点击从不设置适配器的ErrorListener

关于android - 当我在回收器 View 中显示数据时出错 :RecyclerView: No adapter attached; skipping layout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43635593/

相关文章:

android - 如何使用 glide 将图像下载到位图中?

android - 如何在 map 点击时在 ImageView 中显示可绘制的图像?

mysql - 发送到客户端 Node.js MySql 后无法设置 header

mysql - 遍历 MySQL 行

mysql - 过滤掉多个评分中的第一个评分

c# - 无法将类型 'System.Linq.IQueryable<int>' 转换为 'int'

android - 检查SDCARD所有可能的状态android

android - 无法在 kotlin 中获取 firebase 当前用户

mysql - 插入后 MySQL 出现 CDbCommand 失败错误

mysql - 获取具有特定值的记录数量,但每个唯一字段仅获取一次