尝试设置适配器:不断获取E / RecyclerView:未连接适配器;跳过布局

时间:2018-11-04 17:07:15

标签: android android-recyclerview android-adapter recycler-adapter

我在Logcat中不断收到此消息: E / RecyclerView:未连接适配器;跳过布局

到目前为止,我在StackOverflow上搜索了很长时间,但答案似乎对我不起作用。在我看来,适配器设置正确。 我正在尝试为Android中的应用实现即时通讯功能。

我将在下面发布代码。

public class MessageListActivity extends AppCompatActivity {
    public RecyclerView mMessageRecycler;
    public MessageListAdapter mMessageAdapter;
    ArrayList<String> msgidlist = new ArrayList<String>();
    RequestQueue rq;
    String url, id_from, id_to, msgid, m_from, m_to, mnicksender, mnickreceiver, mbody,mtimestamp, mwasread;
    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_message_list);
        id_to="2243";
        id_from="5073";
        url = "https://www.someurl.com/chat.php?id1="+id_from+"&id2="+id_to;
        rq = Volley.newRequestQueue(this);
        sendjsonrequest();
    }

    public void sendjsonrequest() {
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                // Process the JSON
                try{
                    // Loop through the array elements
                    for(int i=0;i<response.length();i++){
                        // Get current json object
                        JSONObject messages = response.getJSONObject(i);
                        // Get the current profile (json object) data
                        msgid = messages.getString("msgid");
                        m_from = messages.getString("id_from");
                        m_to = messages.getString("id_to");
                        mnicksender = messages.getString("sender");
                        mnickreceiver = messages.getString("receiver");
                        mbody = messages.getString("body");
                        mtimestamp = messages.getString("timestamp");
                        mwasread = messages.getString("wasread");
                        messageData.setmsgid(msgid);
                        messageData.setm_from(m_from);
                        messageData.setm_to(m_to);
                        messageData.setmnicksender(mnicksender);
                        messageData.setMnickreceiver(mnickreceiver);
                        messageData.setBody(mbody);
                        messageData.setTimestamp(mtimestamp);
                        messageData.setWasread(mwasread);
                        msgidlist.add(msgid);
                    }
                }catch (JSONException e){
                    e.printStackTrace();
                }
                mMessageRecycler = findViewById(R.id.reyclerview_message_list);
                mMessageAdapter = new MessageListAdapter(MessageListActivity.this, msgidlist);
                mMessageRecycler.setLayoutManager(new LinearLayoutManager(MessageListActivity.this));
                mMessageRecycler.setAdapter(mMessageAdapter);
            }

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

}

关于如何处理此问题的任何想法。

2 个答案:

答案 0 :(得分:1)

您的代码很好,但是需要一些小的更改

在OnCreate中添加以下代码行。 请记住,请始终在“活动/片段”的OnCreate或OnResume状态下初始化UI小部件。

mMessageRecycler = findViewById(R.id.reyclerview_message_list);

然后在声明Recyclerview小部件之后在OnCreate或OnResume中添加此行,也将该行添加。

mMessageRecycler.setHasFixedSize(true);

mMessageRecycler.setLayoutManager(new LinearLayoutManager(MessageListActivity.this));

然后在完成上述几行之后,可以将适配器初始化保留在API响应调用中。

答案 1 :(得分:1)

onCreate()方法中添加以下两行,然后从onResponse()中删除。在这种情况下,由于找不到nullpointer对象或未附加视图而将产生RecyclerView错误或跳过布局。因此,请始终以onCreate()onResume()的活动方法来分配视图。

 mMessageRecycler = findViewById(R.id.reyclerview_message_list);
 mMessageRecycler.setLayoutManager(new LinearLayoutManager(MessageListActivity.this));