Android与PC通信,客户端运行失败 通信android服务器安卓客户端 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 myTextView.setText(msg)非UI线程不能更新UI,通过handle更新吧。 怎么通过handle更新小白一个 public void run() { try { sk = new Socket("127.0.0.1", 12345); // 创建客户端数据输入,输出流,用于对服务器发送或接收数据 InputStream is = sk.getInputStream(); byte[] b = new byte[1024]; int leng = is.read(b); String msg = new String(b); //myTextView.setText(msg); handler.hasMessages(1, msg);//新增 String ss = new String(b, 0, leng, "UTF-8"); System.out.println(ss); is.close(); sk.close(); } catch (Exception e) { e.printStackTrace(); } }下面再增加一个Handler handler=new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what) { case 1: myTextView.setText(msg.obj); break; default: break; } return false; } }); 我加了之后,客户端:package com.example.testandroid2;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import android.widget.EditText;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.TextView;import android.widget.Button;import android.widget.Toast;import android.view.View.OnClickListener;import android.os.Handler;import android.os.Message;public class MainActivity extends Activity { private TextView myTextView; private EditText myEditText; private Button btnProduct = null; // private OutputStream oi; DataOutputStream out; private String edit; private Socket sk; boolean flag = false; Thread thread; Button.OnClickListener button_listener = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView = (TextView) findViewById(R.id.textView1); myEditText = (EditText) findViewById(R.id.edittext); btnProduct = (Button) findViewById(R.id.button1); btnProduct.setOnClickListener(listener); Thread t = new Thread(new Runnable() { public void run() { try { sk = new Socket("192.168.1.104", 12345); // 创建客户端数据输入,输出流,用于对服务器发送或接收数据 InputStream is = sk.getInputStream(); byte[] b = new byte[1024]; int leng = is.read(b); String msg = new String(b); // myTextView.setText(msg); handler.hasMessages(1, msg);//新增 String ss = new String(b, 0, leng, "UTF-8"); System.out.println(ss); is.close(); sk.close(); } catch (Exception e) { e.printStackTrace(); } } Handler handler=new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what) { case 1: myTextView.setText((CharSequence)msg.obj); break; default: break; } return false; } }); }); t.start(); } private OnClickListener listener = new OnClickListener() { public void onClick(View v) { (new Thread() {// 这里有一个新线程,网络操作放到这里线程里 public void run() { super.run(); try { // sk = new Socket("192.168.253.1", 12345); // 创建客户端数据输入,输出流,用于对服务器发送或接收数据 edit = myEditText.getText().toString();// 得到EditText里面的内容 out = new DataOutputStream(sk.getOutputStream()); out.writeUTF(edit); } catch (IOException e1) { System.out.println("无法连接"); } } }).start(); } };}运行后点击发送,还是一样的结果:怎么办啊,楼上大神 1、添加网络链接权限2、myTextView.setText((CharSequence)msg.obj);//myTextView.setText((String)msg.obj);再你贴一下你logcat红颜色显示的部分,window->show view->other->logcat (不要是logcat(deprecated)) 刚才写错了// myTextView.setText(msg);Message myMsg = handler.obtainMessage(1,msg);handler.sendMessage(myMsg); 哎,还有在线程里面的edit = myEditText.getText().toString();// 得到EditText里面的内容,这个不能放在run里面 刚才写错了// myTextView.setText(msg);Message myMsg = handler.obtainMessage(1,msg);handler.sendMessage(myMsg);我照着又改了一下,还是一样的问题。要不要我把程序传给你看一看吧......... 仔细一看。。你把handler放错地方了放到和OnClickListener类似的handler是内部类啊。。 仔细一看。。你把handler放错地方了放到和OnClickListener类似的handler是内部类啊。。public class MainActivity extends Activity { private TextView myTextView; private EditText myEditText; private Button btnProduct = null; // private OutputStream oi; DataOutputStream out; private String edit; private Socket sk; boolean flag = false; Thread thread; Button.OnClickListener button_listener = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView = (TextView) findViewById(R.id.textView1); myEditText = (EditText) findViewById(R.id.edittext); btnProduct = (Button) findViewById(R.id.button1); btnProduct.setOnClickListener(listener); Thread t = new Thread(new Runnable() { public void run() { try { sk = new Socket("192.168.1.104", 12345); // 创建客户端数据输入,输出流,用于对服务器发送或接收数据 InputStream is = sk.getInputStream(); byte[] b = new byte[1024]; int leng = is.read(b); String msg = new String(b); // myTextView.setText(msg); Message myMsg = handler.obtainMessage(1,msg); handler.sendMessage(myMsg); String ss = new String(b, 0, leng, "UTF-8"); System.out.println(ss); is.close(); sk.close(); } catch (Exception e) { e.printStackTrace(); } } }); t.start(); } Handler handler=new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what) { case 1: myTextView.setText((CharSequence)msg.obj); break; default: break; } return false; } }); private OnClickListener listener = new OnClickListener() { public void onClick(View v) { (new Thread() {// 这里有一个新线程,网络操作放到这里线程里 public void run() { super.run(); try { // sk = new Socket("192.168.253.1", 12345); // 创建客户端数据输入,输出流,用于对服务器发送或接收数据 edit = myEditText.getText().toString();// 得到EditText里面的内容 out = new DataOutputStream(sk.getOutputStream()); out.writeUTF(edit); } catch (IOException e1) { System.out.println("无法连接"); } } }).start(); } };}这样放对吗,可是这样放运行还是出错啊 代码更新了,点button按钮不会崩溃,但什么反应都没有package com.example.testandroid22;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.Socket;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class TestAndroid22 extends Activity { private TextView myTextView; private EditText myEditText; private Button btnProduct = null; // private OutputStream oi; DataOutputStream out; private String edit; private Socket sk; boolean flag = false; Thread thread; Button.OnClickListener button_listener = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_android22); myTextView = (TextView) findViewById(R.id.textView1); myEditText = (EditText) findViewById(R.id.edittext); btnProduct = (Button) findViewById(R.id.button1); btnProduct.setOnClickListener(listener); Thread t = new Thread(new Runnable() { public void run() { try { sk = new Socket("127.0.0.1", 12345); // 创建客户端数据输入,输出流,用于对服务器发送或接收数据 listener = new OnClickListener() { public void onClick(View v) { (new Thread() {// 这里有一个新线程,网络操作放到这里线程里 public void run() { super.run(); try { edit = myEditText.getText().toString();// 得到EditText里面的内容 out = new DataOutputStream( sk.getOutputStream()); out.writeUTF(edit); out.flush(); // out.close(); } catch (IOException e1) { e1.printStackTrace(); System.out.println("无法连接"); } } }).start(); } }; InputStream is = sk.getInputStream(); byte[] b = new byte[1024]; int leng = is.read(b); String msg = new String(b); myTextView.setText(msg); String ss = new String(b, 0, leng, "UTF-8"); System.out.println(ss); is.close(); // sk.close(); } catch (Exception e) { e.printStackTrace(); } } }); t.start(); } private OnClickListener listener;}求大神再看一看 没崩溃是你button添加的监听是null吧btnProduct.setOnClickListener(listener);//添加了监听private OnClickListener listener;//但是监听是空。你添加了Null的listener,之后才在thread里创建了listener对象第65行你依然myTextView.setText(msg);//在线程里才做ui线程会报错的使用handler……百度一下handler的使用就明白怎么用了 代码更新了,现在终于可以传数据不蹦了,再次谢谢楼上各位热心回答,感激不尽~结贴ing~ googlemap开发 始终出不了地图界面 Phonegap 与后台数据交互问题 游戏开发,各个关卡的信息如何存放? 真心求 IWindowManager 及相关文件 求解决 调用camera 画面变形的问题!3Q CTS测试-真机如何选择 求这abduction world attack效果实现方法 【Android相册】自己写的相册,拍完照后无法实时加载照片 急求助!!MAC 10.10版本搭建安卓开发环境 开发手机APP时如何做到历史数据展示? 请大神指点数据库应该如何设计合理,方便。 myeclipse8.5配置android sdk localtion就是不显示版本,100分
非UI线程不能更新UI,通过handle更新吧。
怎么通过handle更新小白一个
public void run() {
try {
sk = new Socket("127.0.0.1", 12345); // 创建客户端数据输入,输出流,用于对服务器发送或接收数据
InputStream is = sk.getInputStream();
byte[] b = new byte[1024];
int leng = is.read(b);
String msg = new String(b);
//myTextView.setText(msg);
handler.hasMessages(1, msg);//新增
String ss = new String(b, 0, leng, "UTF-8");
System.out.println(ss);
is.close();
sk.close();
} catch (Exception e) {
e.printStackTrace();
}
}下面再增加一个Handler handler=new Handler(new Handler.Callback()
{
@Override
public boolean handleMessage(Message msg)
{
switch (msg.what)
{
case 1:
myTextView.setText(msg.obj);
break; default:
break;
}
return false;
}
});
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;import android.widget.EditText;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Button;
import android.widget.Toast;
import android.view.View.OnClickListener;import android.os.Handler;
import android.os.Message;public class MainActivity extends Activity {
private TextView myTextView;
private EditText myEditText;
private Button btnProduct = null;
// private OutputStream oi;
DataOutputStream out;
private String edit;
private Socket sk;
boolean flag = false;
Thread thread;
Button.OnClickListener button_listener = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.textView1);
myEditText = (EditText) findViewById(R.id.edittext);
btnProduct = (Button) findViewById(R.id.button1);
btnProduct.setOnClickListener(listener);
Thread t = new Thread(new Runnable() {
public void run() {
try {
sk = new Socket("192.168.1.104", 12345); // 创建客户端数据输入,输出流,用于对服务器发送或接收数据
InputStream is = sk.getInputStream();
byte[] b = new byte[1024];
int leng = is.read(b);
String msg = new String(b);
// myTextView.setText(msg);
handler.hasMessages(1, msg);//新增
String ss = new String(b, 0, leng, "UTF-8");
System.out.println(ss);
is.close();
sk.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Handler handler=new Handler(new Handler.Callback()
{
@Override
public boolean handleMessage(Message msg)
{
switch (msg.what)
{
case 1:
myTextView.setText((CharSequence)msg.obj);
break;
default:
break;
}
return false;
}
});
});
t.start();
} private OnClickListener listener = new OnClickListener() { public void onClick(View v) { (new Thread() {// 这里有一个新线程,网络操作放到这里线程里
public void run() {
super.run(); try { // sk = new Socket("192.168.253.1", 12345);
// 创建客户端数据输入,输出流,用于对服务器发送或接收数据
edit = myEditText.getText().toString();// 得到EditText里面的内容
out = new DataOutputStream(sk.getOutputStream());
out.writeUTF(edit); } catch (IOException e1) {
System.out.println("无法连接");
} }
}).start();
} };
}
运行后点击发送,还是一样的结果:怎么办啊,楼上大神
1、添加网络链接权限
2、myTextView.setText((CharSequence)msg.obj);//myTextView.setText((String)msg.obj);
再你贴一下你logcat红颜色显示的部分,
window->show view->other->logcat (不要是logcat(deprecated))
Message myMsg = handler.obtainMessage(1,msg);
handler.sendMessage(myMsg);
edit = myEditText.getText().toString();// 得到EditText里面的内容,这个不能放在run里面
Message myMsg = handler.obtainMessage(1,msg);
handler.sendMessage(myMsg);
我照着又改了一下,还是一样的问题。
要不要我把程序传给你看一看吧.........
放到和OnClickListener类似的
handler是内部类啊。。
放到和OnClickListener类似的
handler是内部类啊。。
public class MainActivity extends Activity {
private TextView myTextView;
private EditText myEditText;
private Button btnProduct = null;
// private OutputStream oi;
DataOutputStream out;
private String edit;
private Socket sk;
boolean flag = false;
Thread thread;
Button.OnClickListener button_listener = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.textView1);
myEditText = (EditText) findViewById(R.id.edittext);
btnProduct = (Button) findViewById(R.id.button1);
btnProduct.setOnClickListener(listener);
Thread t = new Thread(new Runnable() {
public void run() {
try {
sk = new Socket("192.168.1.104", 12345); // 创建客户端数据输入,输出流,用于对服务器发送或接收数据
InputStream is = sk.getInputStream();
byte[] b = new byte[1024];
int leng = is.read(b);
String msg = new String(b);
// myTextView.setText(msg);
Message myMsg = handler.obtainMessage(1,msg);
handler.sendMessage(myMsg);
String ss = new String(b, 0, leng, "UTF-8");
System.out.println(ss);
is.close();
sk.close();
} catch (Exception e) {
e.printStackTrace();
}
}
});
t.start();
} Handler handler=new Handler(new Handler.Callback()
{
@Override
public boolean handleMessage(Message msg)
{
switch (msg.what)
{
case 1:
myTextView.setText((CharSequence)msg.obj);
break;
default:
break;
}
return false;
}
});
private OnClickListener listener = new OnClickListener() { public void onClick(View v) { (new Thread() {// 这里有一个新线程,网络操作放到这里线程里
public void run() {
super.run(); try { // sk = new Socket("192.168.253.1", 12345);
// 创建客户端数据输入,输出流,用于对服务器发送或接收数据
edit = myEditText.getText().toString();// 得到EditText里面的内容
out = new DataOutputStream(sk.getOutputStream());
out.writeUTF(edit); } catch (IOException e1) {
System.out.println("无法连接");
} }
}).start();
} };
}
这样放对吗,可是这样放运行还是出错啊
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class TestAndroid22 extends Activity {
private TextView myTextView;
private EditText myEditText;
private Button btnProduct = null;
// private OutputStream oi;
DataOutputStream out;
private String edit;
private Socket sk;
boolean flag = false;
Thread thread;
Button.OnClickListener button_listener = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_android22);
myTextView = (TextView) findViewById(R.id.textView1);
myEditText = (EditText) findViewById(R.id.edittext);
btnProduct = (Button) findViewById(R.id.button1);
btnProduct.setOnClickListener(listener);
Thread t = new Thread(new Runnable() {
public void run() {
try {
sk = new Socket("127.0.0.1", 12345); // 创建客户端数据输入,输出流,用于对服务器发送或接收数据
listener = new OnClickListener() {
public void onClick(View v) {
(new Thread() {// 这里有一个新线程,网络操作放到这里线程里
public void run() {
super.run();
try {
edit = myEditText.getText().toString();// 得到EditText里面的内容
out = new DataOutputStream(
sk.getOutputStream());
out.writeUTF(edit);
out.flush();
// out.close();
} catch (IOException e1) {
e1.printStackTrace();
System.out.println("无法连接");
}
}
}).start();
}
};
InputStream is = sk.getInputStream();
byte[] b = new byte[1024];
int leng = is.read(b);
String msg = new String(b);
myTextView.setText(msg);
String ss = new String(b, 0, leng, "UTF-8");
System.out.println(ss);
is.close();
// sk.close();
} catch (Exception e) {
e.printStackTrace();
}
}
});
t.start();
} private OnClickListener listener;
}求大神再看一看
btnProduct.setOnClickListener(listener);//添加了监听
private OnClickListener listener;//但是监听是空。
你添加了Null的listener,之后才在thread里创建了listener对象
第65行你依然myTextView.setText(msg);//在线程里才做ui线程会报错的
使用handler……百度一下handler的使用就明白怎么用了
结贴ing~