2016-05-23 10 views
0

私はそれを実装中にチャットアプリケーションを作っています。私はこのためにメッセージを自動的に更新する必要があります。私はasyntacksを使用しています。このため私は、asyntaksオプションを使ってリフレッシュすることができなくなるたびに疑問を持っています。ですから、1秒ごとにチャットアクティビティをリフレッシュする方法や方法はありません。更新チャット毎秒

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

我々はJSONを取っていたこのhttp://stackoverflow.com/questions/16954712/android-whatsapp-chat-examples?rq=1 – Aradhna

+0

を試してみてくださいを持っていますこのチャットアプリケーション。ページをリロードするためにasyntaskを使用しました。これでは、2つのjson oneを送信側に、もう1つを受信側に使用しています。 –

+0

2〜5秒ごとに消灯し、非同期をリフレッシュするアラームを設定できます。または、Time_Tickアクションでサービスを設定し、非同期をリフレッシュすることもできます。 – Aradhna

答えて

0

サーバー効率の多くを失うので、それはあなたのチャットごとに秒をリフレッシュするために本当に悪い考えです。あなたはこのようにそれを行う必要があります。サーバーから

  1. ダウンロードすべてのメッセージ、
  2. ダウンロード最後のメッセージよりも大きいIDを持つすべてのメッセージが
  3. 、(ロングポーリングまたはポーリングを持つなど)が存在している場合任意のメッセージ、更新リスト。

たとえば、Soket.ioやweboskectなどを使用します。その後

:サーバーとの接続を作成します

  1. ダウンロードすべてのメッセージ、
  2. 次に、サーバは、新しいメッセージを持つことになります場合は、この情報を受け取った場合、
  3. の情報を送信する必要があり、ダウンロードのメッセージ最後の1つのメッセージより大きなIDを持つ

私のこと、チャットの方がいいですね。ここでは、socket.io

にチャットのdemoを持って楽しい

関連する問題