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



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

到目前为止,我在StackOverflow上搜索了很长一段时间,但答案似乎对我不起作用。在我看来,适配器设置正确。我正在尝试在安卓系统中为应用程序实现信使功能。

我会在下面发布代码。

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);
}
}

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

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

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

mMessageRecycler = findViewById(R.id.reyclerview_message_list);

然后在声明Recyclerview小部件后的OnCreate或OnResume中添加此行,同时添加此行。

mMessageRecycler.setHasFixedSize(true);

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

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

onCreate()方法中添加以下两行,并从onResponse()中删除。在这种情况下,它将生成nullpointer错误或跳过布局,因为视图找不到或附加了RecyclerView对象。因此,请始终使用onCreate()onResume()活动方法分配视图。

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

最新更新