我想製作一個簡單的應用程序。在用戶看到一個編輯文本的地方..在其中輸入一些文本..然後按發送...然後筆記本電腦上的服務器收到該消息。在Android中使用數據報的簡單網絡連接
現在NetworkOnMainThread異常給我頭痛......該應用完全適用於2.3.3,因爲當時沒有NetworkOnMainThread Exception這樣的事情。
已經搜查了很多..有兩種解決方案
- 製作新的線程聯網或
- 的AsyncTask。
我試了兩個沒有任何結果。
嘗試1:有獨立的線程:
現在我能明白的是,我不得不啓動一個單獨的線程。好。我做到了。
以下是我的客戶端代碼。
EditText e ;
TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
e= (EditText) findViewById(R.id.editText1);
tv = (TextView) findViewById(R.id.textView1);
Thread startNetworking = new Thread(new NetworkThread());
startNetworking.start();
}
public void sendMessage(View v){
if(NetworkThread.sendToClient(e.getText().toString()))
tv.setText("Status : Successful");
else
tv.setText("Status : Unsuccessful");
}
sendMessage是我發送按鈕的onClick函數。我還有一個JAVA文件NetworkThread.java ....
下面是一個代碼:
public class NetworkThread implements Runnable{
static DatagramSocket socket;
static InetAddress add;
public void run() {
try {
socket = new DatagramSocket();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
add = InetAddress.getByName("192.168.1.12");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static boolean sendToClient(String message){
DatagramPacket p = new DatagramPacket(message.getBytes(),message.getBytes().length,add,4444);
try {
socket.send(p);
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
}
這仍然無法正常工作。我首先想要耗盡這個第一次嘗試,然後我將繼續詢問關於AsyncTask和我所嘗試的內容。所以暫時請幫我實現發送和接收字符串這個簡單的任務。
你搜索谷歌在這個話題?這裏有很多類似的問題:https://www.google.com/search?q=NetworkOnMainThread+asynctask 例如:https://gist.github.com/3117827 –
是的,我有。但我的問題與AsyncTask,我已經評論下面的答案。如果解決了,那麼我很高興使用AsyncTask。 – PrateekArora