2017-01-17 24 views
0

私はクライアント/サーバーアプリケーションに問題があります。 クライアントはアンドロイドにあり、サーバーはJavaアプリです。Androidチャットメッセージは表示されません

私は、Javaデスクトップアプリケーションでサーバーとクライアントを起動すると問題ありません。しかし、私はアンドロイドアプリを起動するときにバグがあります。サーバーからのメッセージはアンドロイドに表示されますが、アンドロイド自身または他のクライアントからのメッセージは表示されません。

Android app look || What communicates should be here

エラーはありませんが、メッセージは表示されません。

@update アンドロイドでは、クライアント自体からのメッセージだけでなく、他のチャットクライアントからのメッセージも表示されます。誰かが新しいチャットに参加するかどうかしかわかりません。私はコミュニケーションに何か問題があると思いますか?しかし、私は何を知っていません。

アップデート2 @私は、プログラムのコードのこの部分を実行しないことに気づく

protected Void doInBackground(String... params) 
     { 
      message = params[0].toString(); 
      Log.e("CLIENT","Message In Background: "+message); 
      if (out != null && !out.checkError()) { 
       out.println(message); 
       out.flush(); 
       Log.e("CLIENT","Message send"+message); 
      } 
      return null; 
     } 

私はそれを呼び出すが、ログ監視に私が送信者クラスからのメッセージを取得いけない

Log.e("CLIENT","Create sender"); 
Sender sender = new Sender(); 
sender.execute(message); 
Log.e("CLIENT","sender.execute"); 

メッセージ:

01-17 17:15:39.330 8232-8232/com.example.testmulti E/Home: Application start 
01-17 17:15:39.596 8232-8259/com.example.testmulti E/EGL_emulation: tid 8259: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH) 
01-17 17:15:52.137 8232-8232/com.example.testmulti E/ServerIP: Server ip is: 192.168.0.102 
01-17 17:15:52.266 8232-8232/com.example.testmulti E/MainActivity: Start Main Activity 
01-17 17:15:52.325 8232-8262/com.example.testmulti E/serverAddr: /192.168.0.102 
01-17 17:15:52.325 8232-8262/com.example.testmulti E/TCP Client: C: Connecting... 
01-17 17:15:52.342 8232-8262/com.example.testmulti E/TCP Server IP: 192.168.0.102 
01-17 17:15:52.343 8232-8262/com.example.testmulti E/TCP Client: C: Sent. 
01-17 17:15:52.343 8232-8262/com.example.testmulti E/TCP Client: C: Done. 
01-17 17:15:52.560 8232-8259/com.example.testmulti E/EGL_emulation: tid 8259: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH) 
01-17 17:15:59.416 8232-8232/com.example.testmulti E/MainActivity: Button was clicked 
01-17 17:15:59.417 8232-8232/com.example.testmulti E/CLIENT: Create sender 
01-17 17:15:59.419 8232-8232/com.example.testmulti E/CLIENT: sender.execute 

送信されましたsender.execute(メッセージ);

どのようにリピートするのですか?


MainActivity

public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

     arrayList = new ArrayList<String>(); 

     final EditText editText = (EditText) findViewById(R.id.editText); 
     Button send = (Button)findViewById(R.id.send_button); 

     mList = (ListView)findViewById(R.id.list); 
     mAdapter = new MyCustomAdapter(this, arrayList); 
     mList.setAdapter(mAdapter); 

     new connectTask().execute("");   
     send.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 

       String message = editText.getText().toString(); 
       if (mClient != null) { 
        mClient.sendMessage(message); 
       } 
       mAdapter.notifyDataSetChanged(); 
       editText.setText(""); 
      } 
     }); 

    } 


    public class connectTask extends AsyncTask<String,String,Client> { 

      @Override 
      protected Client doInBackground(String... message) { 
       mClient = new 

      Client(new Client.OnMessageReceived() { 

       @Overrid 
       public void messageReceived(String message) { 
        publishProgress(message); 
       } 
      }); 
      mClient.run();    
      return null; 
     } 

     @Override 
     protected void onProgressUpdate(String... values) { 
      super.onProgressUpdate(values); 
      arrayList.add(values[0]); 
      mAdapter.notifyDataSetChanged(); 
     } 
    } 

Clientクラス

public void sendMessage(String message) 
    { 
     Sender sender = new Sender(); 
     sender.execute(message); 
    } 


public void run() { 
     mRun = true; 
     try { 
      InetAddress serverAddr = InetAddress.getByName(SERVERIP); 
      Log.e("serverAddr", serverAddr.toString()); 
      Log.e("TCP Client", "C: Connecting..."); 
      Socket socket = new Socket(serverAddr, SERVERPORT); 
      Log.e("TCP Server IP", SERVERIP); 
      try { 
       out = new PrintWriter(new BufferedWriter(
         new OutputStreamWriter(socket.getOutputStream())), true); 
       Log.e("TCP Client", "C: Sent."); 
       Log.e("TCP Client", "C: Done."); 
       in = new BufferedReader(new InputStreamReader(
         socket.getInputStream())); 
       while (mRun) { 
        serverMessage = in.readLine(); 
        if (serverMessage != null && mMessageListener != null) { 
         mMessageListener.messageReceived(serverMessage);} 
        serverMessage = null; 
       } 
       Log.e("RESPONSE FROM SERVER", "S: Received Message: '" 
         + serverMessage + "'"); 
      } catch (Exception e) {Log.e("TCP", "S: Error", e); 
       }finally {socket.close();} 
        } catch (Exception e) {Log.e("TCP", "C: Error", e);}   
    } 

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

     private String message; 

     @Override 
     protected Void doInBackground(String... params) 
     { 
      message = params[0].toString();    
      if (out != null && !out.checkError()) { 
       out.println(message); 
       out.flush(); 
      } 
      return null; 
     } 
    } 

答えて

0

たぶん、あなたはあなたのセンドのonClickであなたのリストにメッセージを追加する必要がありますか?

[...] 
arrayList.add(message); 
mAdapter.notifyDataSetChanged(); 
[...] 
+0

はいしかし、アンドロイド上で、私は他のクライアントからのメッセージ そして、私はアンドロイドのメッセージを参照してくださいカントJavaクライアント上を参照してくださいカント。 – Kainka

+0

あなたの送信のonClickListenerに行を追加しましたか? – Prexx

関連する問題