我在android上有一个client-sever应用程序,它们都运行在同一台机器上。 在我的客户端应用程序的第一个活动中,我尝试调用应该连接到服务器应用程序的客户端类,但是我强行关闭。
这是我在我的应用程序的第一个活动中调用客户端类的方式:
Thread cThread=new Thread(new ClientThread());
cThread.start();
这是我的客户端类:
public class ClientThread implements Runnable{
private Handler handler=new Handler();
Socket socket;
private TextView clientState;
public void run()
{
try
{
InetAddress serverAddr=InetAddress.getByName("10.0.2.2");
handler.post(new Runnable(){
public void run(){
clientState.setText(" try to connect!");
}
});
socket=new Socket(serverAddr, 8080);
//connected=true;
handler.post(new Runnable(){
public void run(){
clientState.setText("Connected!");
}
});
}
catch(Exception e){
handler.post(new Runnable(){
public void run(){
clientState.setText("Error");
}
});
e.printStackTrace();
}
}
protected void onStop() {
super.onStop();
try {
// make sure you close the socket upon exiting
//out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
有人可以说出错了或至少给了我一个想法。 我应该说的一件事是我的客户端工作正常 - 它连接到服务器,当客户端类集成在我的第一个活动中时(我的意思是,最初我没有客户端类都在第一个活动中...而且它工作得很好)。 我在这里了解更多细节! 提前谢谢你!
答案 0 :(得分:1)
如果没有堆栈跟踪,它看起来就像崩溃一样导致你没有初始化textview。
package com.example.helloandroid;
import android.app.Activity;
import android.os.Bundle;
public class HelloAndroid extends Activity {
TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.mytextview);
}
public class ClientThread extends Thread {
...// Do NOT init textview
}
}