AndroidでSocket通信時にエラー : android.os.NetworkOnMainThreadException

タイトルの通りですが、Android上でTCPクライアントを作ろうとしてエラーが出て詰まったので記録。

new Socket(“(ip address), (port)”); にてソケットを作ろうとすると強制終了。
エラーログには「android.os.NetworkOnMainThreadException」という文字が。

どうやら、Android3.0以降ではメインスレッド(UIスレッド)でネットワーク処理を行うとこのエラーになるようです。

AsyncTaskクラスを継承したクラスを作成することにより解決。(AsyncTaskLoaderを利用する方法もあるようです)

TCPTask.java

public class TCPTask extends AsyncTask<Integer, Integer, Integer> {

    @Override
    protected Bitmap doInBackground(Integer... params) {
        
        try {
            Socket sock = new Socket("(ip address), (port)");  // 接続開始
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return null;
    }
}

これを、メインスレッドで呼び出せばおk。

MainActivity.javaの一部

TCPTask tcpTask = new TCPTask();
tcpTask.execute();

ソケット終了処理等を省いています。


コメントを残す