Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-更新回收器视图在Listener中无法正常工作_Android_Android Recyclerview - Fatal编程技术网

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线程
,它成功了!非常感谢