【发布时间】:2017-07-30 19:18:08
【问题描述】:
这是 AsyncTask 类中的代码: 包 com.mermit.enter;
import android.os.AsyncTask;
import android.os.Bundle;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
public class isOnlineTask extends AsyncTask<Void, Void, Boolean> {
public static Boolean networkStatus;
@Override
protected Boolean doInBackground(Void... params) {
/*try {
int timeoutMs = 1500;
Socket sock = new Socket();
SocketAddress sockaddr = new InetSocketAddress("8.8.8.8", 53);
sock.connect(sockaddr, timeoutMs);
sock.close();
return true;
} catch (IOException e) { return false; }*/
return true;
}
@Override
protected void onPostExecute(Boolean result) {
// result holds what you return from doInBackground
networkStatus = result;
}
}
这是我的主要课程中重要的代码。函数 isOnline 在 if 语句中被调用,并期望从 asynctask 返回布尔值。我希望主线程等待异步任务返回响应,这就是我使用 .get() 的原因。我浏览了网站上的很多问题,但找不到适合我具体情况的解决方法。 Logcat 也不会给出错误消息或任何奇怪的东西,这无济于事。
package com.mermit.enter;
import static com.mermit.enter.isOnlineTask.networkStatus;
...
public boolean isOnline() {
try {
new isOnlineTask().get();
return networkStatus;
} catch (InterruptedException e) {
e.printStackTrace();
return false;
} catch (ExecutionException e) {
e.printStackTrace();
return false;
}
}
编辑:我也试过
return new isOnlineTask().execute()
代替
new isOnlineTask().get();
return networkStatus;
【问题讨论】:
标签: java android multithreading android-asynctask