我想运行我的ServerSocket并且我知道如何使用Thread进行操作,但我想在Ui中启动它,所以我在考虑使用AsyncTask启动此服务器。
我有代码:
ServerSocket serversocket = new ServerSocket();
serversocket.execute();
public class ServerSocket extends AsyncTask<Void, Void, String>{
public void DataFetcher(android.support.v4.app.FragmentManager fragmentManager){
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... params) {
String data = null;
Toast.makeText(getApplicationContext(), "server is on", Toast.LENGTH_SHORT).show();
return data;
}
@Override
protected void onPostExecute(String result) {
// make gui thread do some work
}
}
但它没有用,有人能告诉我该怎么办?
我使用AsyncTask运行ServerClient,我也想运行我的服务器谎言, 这是我的客户代码:
public class MyClientTask extends AsyncTask<Void, Void, Void> {
String dstAddress="..."
int dstPort=8080;
String response = "";
MyClientTask(String addr, int port){
dstAddress = addr;
dstPort = port;
}
@Override
protected Void doInBackground(Void... arg0) {
Socket socket = null;
try {
socket = new Socket(dstAddress, dstPort);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
response = "UnknownHostException: " + e.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
response = "IOException: " + e.toString();
}finally{
if(socket != null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
@Override
protected void onPostExecute(Void result)
{
super.onPostExecute(result);
}
}
}
答案 0 :(得分:0)
这是错误的
Toast.makeText(getApplicationContext(), "server is on", Toast.LENGTH_SHORT).show();
Toast
在主线程上运行,因为您无法更新后台Thread
中的UI元素,因此无法从doInBackgroud()
您可以通过onPostExecute()
onProgressUpdate()
来publishProgress()
或doInBackground()
进行此操作
如果它仍然不起作用,那么定义“但它不起作用”。这不是一个非常有用的摘要,说明发生了什么/不发生。
我知道如何使用Thread进行操作,但我想在Ui中启动它
如果您在单独的Thread
中运行它,那么在<{1}}上运行