2016-05-23 13 views
0

Ich mache eine Chat-Anwendung, während ich es implementiere, ich muss die Nachrichten automatisch aktualisieren, dafür verwende ich asyndacks. Aus diesem Grund habe ich Zweifel, dass jedes Mal, wenn wir nicht in der Lage, durch asyntaks Option zu aktualisieren. Also, gibt es eine Möglichkeit oder eine andere Methode, um die Chat-Aktivität für jede Sekunde zu aktualisieren.Update Chat Jede Sekunde

Chat.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(); 

     } 
    } 
+0

versuchen, diese http://stackoverflow.com/questions/16954712/android-whatsapp-chat-examples?rq=1 – Aradhna

+0

Wir genommen hatte json für diese Chat-Anwendung. Wir haben asyntask verwendet, um die Seite neu zu laden. In diesem haben wir zwei json eins für Absender und zweites für Empfänger. –

+0

Sie können einen Alarm einrichten, der alle 2-5 Sekunden ertönt und Ihren Async regeneriert. Oder Sie können einen Dienst mit der Aktion Time_Tick einrichten und Ihren Async aktualisieren. – Aradhna

Antwort

0

Es ist wirklich schlechte Idee, Ihre Chat jede Sekunde zu aktualisieren, weil Sie viele Server Effizienz verlieren. Sie sollten es tun, wie folgt:

  1. Laden Sie alle Nachrichten vom Server,
  2. Laden Sie alle Nachrichten mit größerer ID als letzte Nachricht hat (zum Beispiel mit Lang Polling oder Polling),
  3. Wenn es jede Nachricht, Update-Liste.

Oder verwenden Sie zum Beispiel Soket.io oder weboskect.

Dann:

  1. erstellen Verbindung mit dem Server,
  2. Laden Sie alle Nachrichten,
  3. Dann Informationen senden Server sollten, wenn Sie neue Nachrichten haben,
  4. Wenn Sie diese Informationen erhalten, download Nachrichten mit größerer ID als die letzte Nachricht hat.

I Sache, es ist eine gute Idee für den Chat. Hier haben Sie demo von Chat auf Socket.io

Viel Spaß