Android用の簡単なチャットアプリをコーディングしようとしているので、チャットサーバーがあり、接続しようとしています。だから、メインクラスで私はAndroidでAsyncTaskからネットワーキングを行うと、NetworkOnMainThreadExceptionが発生します。
final EditText etHost = (EditText) findViewById(R.id.entry1);
final EditText etPort = (EditText) findViewById(R.id.entry2);
final EditText messageBoard = (EditText) findViewById(R.id.editText1);
final EditText etSend = (EditText) findViewById(R.id.editText2);
soEd = new SocketAndEditText(etHost, etPort, messageBoard, etSend);
SetNetworking net = new SetNetworking();
SocketAndEditText net.execute(soEd);
final Button sendButton = (Button) findViewById(R.id.button2);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Messager mes = new Messager();
mes.execute(soEd);
}
});
SocketAndEditText
を持って、私は単にソケットと4つのEditText
コンポーネントを維持するクラスです。考え方は、SetNetworking
がネットワーク接続を確立し、Messager
がメッセージを送信するということです。働いていない
テスト:私は
try { InetAddress address1 = InetAddress.getByName("130.237.161.23"); boolean reachable = address1.isReachable(4456); messageBoard.setText("Is host reachable?" + reachable); } catch (Exception e) { messageBoard.setText("Test not working! " + e.toString()); }
としても、非常に簡単なことをしようとするとき、私はこれを取得
Messager
にonPostExecute(Void result)
でpublic class SetNetworking extends AsyncTask<SocketAndEditText, Void, Void> { ... public class Messager extends AsyncTask<SocketAndEditText, Void, Void> { ...
しかし、不思議なこと:どちらのクラスは
AsyncTask
を実装します! android.os.NetworkOnMainThreadException
なぜそれがメインスレッドではなくAsyncTaskにあるのですか?
onPostExecuteはメインスレッドで行われます... – Selvin