Android-更新回收器视图在Listener中无法正常工作
我有这样的添加列表方法Android-更新回收器视图在Listener中无法正常工作,android,android-recyclerview,Android,Android Recyclerview,我有这样的添加列表方法 private void addMessage(String username, String message) { mMessages.add(msgObj); mAdapter.notifyItemInserted(mMessages.size()-1); Log.d("username", msgObj.getUsername()); Log.d("message", msgObj.getMessage()); mAdapter.notifyDa
private void addMessage(String username, String message) {
mMessages.add(msgObj);
mAdapter.notifyItemInserted(mMessages.size()-1);
Log.d("username", msgObj.getUsername());
Log.d("message", msgObj.getMessage());
mAdapter.notifyDataSetChanged();
scrollToBottom();
}
我在这个方法中称之为
private WebSocket connect() throws IOException, WebSocketException
{
return new WebSocketFactory()
.setConnectionTimeout(TIMEOUT)
.createSocket(SERVER)
.addListener(new WebSocketAdapter() {
// A text message arrived from the server.
public void onTextMessage(WebSocket websocket, String message) {
Log.d("WebSocketFactory", message);
JSONObject json = null;
try {
json = new JSONObject(message);
if(json.getString("type").equals("msg")) {
JSONObject data = json.getJSONObject("data");
addMessage(data.getString("author"), data.getString("text"));
}
} catch(JSONException je) {
je.printStackTrace();
}
}
})
.addExtension(WebSocketExtension.PERMESSAGE_DEFLATE)
.connect();
}
这个方法是异步任务
private class NetworkTask extends AsyncTask<String, Void, Integer> {
protected Integer doInBackground(String... params) {
try {
try {
ws = connect();
} catch(IOException ioe) {
ioe.printStackTrace();
}
} catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
}
私有类NetworkTask扩展了AsyncTask{
受保护的整数doInBackground(字符串…参数){
试一试{
试一试{
ws=connect();
}捕获(ioe异常ioe){
ioe.printStackTrace();
}
}捕获(例外e){
e(“Log_标记”,“http连接错误”+e.toString());
}
}
而且效果不好。
显示addMessage方法中的调试日志。我可以看到日志
Log.d(“用户名”,msgObj.getUsername());
Log.d(“message”,msgObj.getMessage());
但是,视图不会更新。但是当我滚动视图时,视图会随之更新。
我每次都要滚动视图才能看到消息
但是!当我在onCreate中调用addMessages方法时,它工作得非常好
我找不出有什么区别
如何解决此问题?我必须在ContextMessage Listner中调用addMessage尝试更新
UI线程中的适配器
在addMessage()
中实现UI线程
,它成功了!非常感谢