我正在尝试制作一个简单的应用程序。用户看到一个edittext ..在其中输入一些文本..然后按发送...然后笔记本电脑上的服务器收到该消息。
现在 NetworkOnMainThread 异常让我头疼......该应用程序在 2.3.3 中完美运行,因为当时没有 NetworkOnMainThread 异常之类的东西。
搜索了很多..两个解决方案是
- 为网络创建新线程或
- 异步任务。
我都试过了,没有任何结果。
尝试 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 以及我尝试过的内容。所以暂时请帮我完成这个简单的发送和接收字符串的任务。