2017-02-24 16 views
2

AndroidアプリがRpiホットスポットに接続しているかどうかをテストしようとしています。私はクライアントコードのためにthis guideに従っています。Androidソケット接続テスト

ボタンを押したときにsocket.isConnected()の状態に応じてトーストメッセージをポップアップしたいと思います。しかし、私はそれを実装しようとするたびに、私はネットワークにメインスレッドの問題を実行すると思う。 onClickでisConnectedメソッドを使用して単純な "if(true)、send toastメッセージ"を追加するには、次のコードをどのように変更できますか?

は、任意の助けをありがとう!

package mrxhaleenterprise.sockettest; 

import java.io.BufferedWriter; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
import java.net.UnknownHostException; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

private Socket socket; 

private static final int SERVERPORT = 39169; 
private static final String SERVER_IP = "172.24.1.1"; 


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

    new Thread(new ClientThread()).start(); 
} 

public void onClick(View view) { 

    try { 

     EditText et = (EditText) findViewById(R.id.EditText01); 
     String str = et.getText().toString(); 
     PrintWriter out = new PrintWriter(new BufferedWriter(
       new OutputStreamWriter(socket.getOutputStream())), 
       true); 
     out.println(str); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

class ClientThread implements Runnable { 

    @Override 
    public void run() { 

     try { 
      InetAddress serverAddr = InetAddress.getByName(SERVER_IP); 

      socket = new Socket(serverAddr, SERVERPORT); 

     } catch (UnknownHostException e1) { 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 

    } 


} 
} 
+0

エラーログを共有できますか? – Kaushal28

答えて

0

onClickあなたが問題を引き起こしているメインスレッド上のソケット(ネットワークオペレーション)に書いているThread.Soメインにと呼ばれています。あなたの下のコードは、バックグラウンドスレッドで実行する必要があります。私はボタンを押したときに、私はトーストメッセージを持つようにしたい

PrintWriter out = new PrintWriter(new BufferedWriter(
        new OutputStreamWriter(socket.getOutputStream())), 
        true); 
      out.println(str); 
0

)がsocket.isConnected(の状態に応じてポップアップします。

いいえ。 Socketを構築したら、になります。接続が切断された場合、そのメソッドは魔法のように偽を返し始めません。 IOExceptionのいずれかが発生したかどうかに応じて、接続の独自の状態を維持する必要があります。おそらくあなたはボタンを望んでいないでしょう。接続が切断されたときにエラーダイアログをポップアップさせたいのですが、