【问题标题】:Update Chat Every second每秒更新聊天
【发布时间】:2016-09-19 21:10:57
【问题描述】:

我正在制作一个聊天应用程序,同时实现它我需要自动更新消息,因为我正在使用 asyntacks。为此,我怀疑每次我们都无法通过 asyntaks 选项进行刷新。那么,是否有任何方法或任何其他方法可以每秒刷新聊天活动。

聊天.java

public class chatclass extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            String receiverid = getIntent().getStringExtra("Rid");
            try {
                URL url = new URL("" + Constant.cht);
                Map<String, Object> paramm = new LinkedHashMap<>();
                paramm.put("sid", "" + Session.getUserID(getApplicationContext()));
                paramm.put("rid", "" + receiverid);
                StringBuilder postData = new StringBuilder();
                for (Map.Entry<String, Object> param : paramm.entrySet()) {
                    if (postData.length() != 0) postData.append('&');
                    postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
                    postData.append('=');
                    postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
                }
                String urlParameters = postData.toString();
                URLConnection conn = url.openConnection();
                conn.setDoOutput(true);
                OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
                writer.write(urlParameters);
                writer.flush();
                String result = "";
                String line;
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                while ((line = reader.readLine()) != null) {
                    result += line;
                }
                writer.close();
                reader.close();
                JSONObject response = new JSONObject(result);
                JSONArray array = response.getJSONArray("data");
                chatslistdata.clear();
                for (int i = 0; i < array.length(); i++) {
                    JSONObject chatobj = array.getJSONObject(i);
                    ChatBeanData chatBeanData = new ChatBeanData();
                    chatBeanData.setChat_id(chatobj.getString("chat_id"));
                    chatBeanData.setRid(chatobj.getString("rid"));
                    chatBeanData.setReciever_name(chatobj.getString("reciever_name"));
                    chatBeanData.setReciever_image(chatobj.getString("reciever_image"));
                    chatBeanData.setSid(chatobj.getString("sid"));
                    chatBeanData.setSender_name(chatobj.getString("sender_name"));
                    chatBeanData.setSender_image(chatobj.getString("sender_image"));
                    chatBeanData.setMessage(chatobj.getString("message"));
                    chatBeanData.setSeen_status(chatobj.getInt("seen_status"));
                    chatBeanData.setTime(chatobj.getString("time"));
                    chatslistdata.add(chatBeanData);
                }

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            chatadapter = new ChatAdapter(ChatsPage.this, chatslistdata);
            LinearLayoutManager mychatmanager = new LinearLayoutManager(ChatsPage.this, LinearLayoutManager.VERTICAL, false);
            mychatmanager.setStackFromEnd(true);
            chatlist.setLayoutManager(mychatmanager);
            chatlist.setAdapter(chatadapter);
            chatclass chatclass = new chatclass();
            chatclass.execute();

        }
    }

【问题讨论】:

  • 我们为这个聊天应用程序使用了 json。我们使用 asyntask 重新加载页面。在此我们使用了两个 json,一个用于发送方,第二个用于接收方。
  • 您可以设置每隔 2-5 秒响一次的闹钟并刷新您的异步。或者您可以在 Time_Tick 操作上设置服务并刷新您的异步。
  • 我们正在按照您的观点工作。
  • 抱歉,没找到你

标签: android refresh chat page-refresh


【解决方案1】:

每秒刷新一次聊天真的很糟糕,因为你会损失很多服务器效率。你应该这样做:

  1. 从服务器下载所有消息,
  2. 下载 ID 大于最后一条消息的所有消息(例如使用长轮询或轮询),
  3. 如果有消息,更新列表。

或者使用例如 Soket.io 或 weboskect。

然后:

  1. 创建与服务器的连接,
  2. 下载所有消息,
  3. 如果您有新消息,服务器应该发送信息,
  4. 如果您收到此信息,请下载 ID 大于最后一条消息的消息。

我觉得,聊天是个好主意。在这里你有demo 在socket.io上聊天

玩得开心

【讨论】:

    【解决方案2】:

    每秒刷新一次聊天以检索消息并不是一个很好的方法。 这可能会使您的服务器因过多的请求而过载,这是可以避免的。

    为了实现实时聊天,如果您收到任何新消息,您的服务器应该发送信息。

    在客户端,您需要为此设置一个监听器。触发侦听器后,您可以下载新消息。

    ConnectyCube Android implementation为例:

    IncomingMessagesManager incomingMessagesManager = chatService.getIncomingMessagesManager();
    
    incomingMessagesManager.addDialogMessageListener(new ChatDialogMessageListener() {
        @Override
        public void processMessage(String dialogId, ConnectycubeChatMessage message, Integer senderId) {
    
        }
    
        @Override
        public void processError(String dialogId, ChatException exception, ConnectycubeChatMessage message, Integer senderId) {
    
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多