我想爲Android編碼一個簡單的聊天應用程序,所以我有一個聊天服務器,我試圖連接到它。因此,在主類我有從AsyncTask在Android中做網絡給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
是一類,我只是保持插槽和四個EditText
組件。想法是SetNetworking
將建立網絡連接並且Messager
將發送消息。這兩個類實現AsyncTask
:
public class SetNetworking extends AsyncTask<SocketAndEditText, Void, Void> {
...
public class Messager extends AsyncTask<SocketAndEditText, Void, Void> {
...
但奇怪的是,在Messager
onPostExecute(Void result)
,當我嘗試做甚至是很簡單的事情
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());
}
我得到這個:
測試不工作! android.os.NetworkOnMainThreadException
爲什麼既然它在AsyncTask中而不在主線程中?
onPostExecute在主線程上完成... – Selvin