java - 将数据从客户端发送到桌面服务器
问题描述
我正在尝试将日期从Android
作为客户端的NetBeans
应用程序发送到作为服务器端的桌面应用程序,连接工作正常,甚至发送数据,但那是在我更新Android IDE
到版本 3 之前!
现在,当我尝试发送数据时,出现以下异常:
android.os.NetworkOnMainThreadException
现在我在这里看到一个帖子是 Stackoverflow ......这个,我明白了,因为发送数据是在主线程上发生的,但我没有使用主线程发送数据,我仍然得到这个每次我尝试发送数据时都会出错。
代码说明:我有两种发送数据的方法,一种是在建立连接后只发送一次数据,第二种是随时发送数据,现在我的第一个在主线程上,但第二个在另一个线程上,第一个线程永远不会发生异常,但它总是会发生在第二个线程上,我听说一个解决方案是使用AsyncTask
,我已经在第二个线程上使用它,现在我得到了 excpention大多数时候,但并非总是如此。
这是我的代码以便更好地理解:
这是第一个只在主线程上运行一次的方法,它将始终有效:
private void SendInformation(){
try{
OutPut = new BufferedWriter(new OutputStreamWriter(ConnectionSocket.getOutputStream(), "UTF-8"));
OutPut.write(android.os.Build.MODEL);
OutPut.newLine();
OutPut.flush();
}catch(Exception e){
e.printStackTrace();
}
}
这是我的第二个线程,这总是给出异常:
public static void SendDetails(String S1, String S2){
Handler handler = new Handler();
handler.postDelayed(new Runnable(){
public void run(){
try{
OutPut = new BufferedWriter(new OutputStreamWriter(ConnectionSocket.getOutputStream(), "UTF-8"));
OutPut.write(S1 + "," + S2);
OutPut.newLine();
OutPut.flush();
}catch(Exception e){
e.printStackTrace();
MainActivity.ErrorMessage.setText(e.toString());
}
}
}, Delay * 1000);
}
这是相同的第二次,但使用AsyncTask
:
private static SendInfoTask SIT = new SendInfoTask();
public static void SendDetails(String S1, String S2){
Handler handler = new Handler();
handler.postDelayed(new Runnable(){
public void run(){
SIT.execute();
}
}, Delay * 1000);
}
static class SendInfoTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
try{
OutPut = new BufferedWriter(new OutputStreamWriter(ConnectionSocket.getOutputStream(), "UTF-8"));
OutPut.write(Client.AppName + "," + Client.NotificationText);
OutPut.newLine();
OutPut.flush();
}catch(Exception e){
e.printStackTrace();
MainActivity.ErrorMessage.setText(e.toString());
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
}
}
有时它工作,有时它不工作,当它工作时,在尝试发送 5 次之后,整个应用程序崩溃!
有人可以帮帮我吗?做我想做的事情的最佳做法是什么?(感谢任何帮助)
解决方案
推荐阅读
- reactjs - 单击编辑按钮时Redux初始值为null
- c# - 如何将对象模型(其中包含对象模型数组)传递给 API 以作为参数插入
- ruby-on-rails - JSONB 整数数组包含值
- python - 当没有给出 url 参数时,如何在 Django 视图中将当前登录用户设置为默认用户
- python - 我如何在 Windows 10 上获取 ORACLE 11 g DATABASE 的 IP 地址以远程连接到它?
- kotlin - 过滤列表然后更改类型
- php - 将 12 个月添加到 2 月 29 日
- c# - CrystalDecisions.Shared.CrystalReportsException:加载报告失败。文件未打开
- python - 如何在 reg 表达式中检查大于检查?
- sql-server - 解码十六进制数据类型