これは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からbooleanを返すことが期待されます。 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;
}
}
編集:あなたは、UIスレッドの実行を停止しようとするべきではありませんので、私はまた、return new isOnlineTask().execute()
代わり new isOnlineTask().get(); return networkStatus;
..? – EpicPandaForce