gpt4 book ai didi

android - 在 Android 中使用数据报进行简单联网

转载 作者:行者123 更新时间:2023-11-29 00:35:34 27 4
gpt4 key购买 nike

我正在尝试制作一个简单的应用程序。在用户看到一个编辑文本的地方..在其中输入一些文本..然后按发送...然后笔记本电脑上的服务器会收到该消息。

现在 NetworkOnMainThread 异常让我很头疼......该应用程序非常适合 2.3.3,因为那时没有 NetworkOnMainThread 异常这样的东西。

搜索了很多..两个解决方案是

  1. 为网络创建新线程或
  2. 异步任务。

我都试过了,没有任何结果。

尝试 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 和我尝试过的内容。所以暂时请帮我完成这个发送和接收字符串的简单任务。

最佳答案

不幸的是,有 sendToClient()在与 NetworkThread 相同的类中定义并不意味着它将在您的网络特定线程上运行。 sendToClient()方法仍将在您的主 (UI) 线程上运行,因为它是从您的 onClick() 调用的方法。 UI 回调,例如 onClick() , 始终在 UI 线程上处理。

我建议使用 AsyncTask因为它使您能够在执行之前将任意数据(例如 message 参数)发送到后台/网络线程。继续使用RunnableThread将需要额外的机器来同步 UI 和网络线程的执行,这些挑战由 AsyncTask 在幕后处理.

关于android - 在 Android 中使用数据报进行简单联网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com