【发布时间】:2015-02-02 04:14:01
【问题描述】:
无论出于何种原因,我的回调都无法正常工作。本质上,我将使用我创建的 tcp 服务器进行群聊。我正在尝试在 java 中创建一个线程,然后使用回调将我从套接字获得的信息提供给主活动。
我目前收到的错误:
12-04 02:53:05.969 15143-15169/com.AndroidBabble E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-4340
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
但我不确定如何执行此 looper.prepare,并且当我执行此操作时,它似乎不起作用 - 所以我想知道您如何在我的代码上下文中实现 looper.prepare。
这是我的代码:
public interface ResponseEvent {
public void responseEvent();
}
主要
public class Main extends Activity implements ResponseEvent{
Button btn;
ClientTask client;
String LOCALHOST = "localhost";
int PORT = 5678;
Thread thread;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.button);
// Thread thread = new Thread(client = new ClientTask(this, LOCALHOST, PORT));
client = new ClientTask(this, LOCALHOST, PORT);
}
public void button(View v){
thread = new Thread(client);
thread.start();
}
public void responseEvent(){
Toast.makeText(getBaseContext(), "Trig", Toast.LENGTH_LONG).show();
}
}
客户端任务
public class ClientTask implements Runnable{
public Handler mHandler;
private ResponseEvent re;
BufferedReader in;
Socket socket;
String HOSTNAME;
int PORT;
String scan;
public ClientTask(ResponseEvent event, String HOSTNAME, int PORT){
re = event;
this.HOSTNAME = HOSTNAME;
this.PORT = PORT;
}
public void run(){
// try {
// socket = new Socket(HOSTNAME, PORT);
// in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
re.responseEvent();
// } catch (IOException ex) {
}
}
最终我想通过响应事件传递一个字符串,它会在 main 中获取它。
【问题讨论】:
-
使用 Java
interface作为回调将是一个好的开始。