这是AsyncTask类中的代码: package com.mermit.enter;如何将asynctask的结果返回到我的主线程
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返回布尔值。我想让主线程等待,直到从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;
在2017年与静态字段沟通..? – EpicPandaForce