0
daggerを使ってokhttp3用のモジュールを作成しています。2.ネットワークモジュール内のインターネット接続を確認したいと思います。それを達成する最善の方法は何ですか?dagger 2のインターネット接続を確認する方法okhttp3
daggerを使ってokhttp3用のモジュールを作成しています。2.ネットワークモジュール内のインターネット接続を確認したいと思います。それを達成する最善の方法は何ですか?dagger 2のインターネット接続を確認する方法okhttp3
answers to this canonical questionのいずれかを見て、単純にカプセル化してください。例えば
、あなたはこのようなインターフェイスかもしれない。そして、
public class ExperimentalOnlineChecker implements OnlineChecker {
private final Runtime runtime;
public ExperimentalOnlineChecker(Runtime runtime) {
this.runtime = runtime;
}
@Override
public boolean isOnline() {
try {
Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = ipProcess.waitFor();
return (exitValue == 0);
}
catch (IOException e) { e.printStackTrace(); }
catch (InterruptedException e) { e.printStackTrace(); }
return false;
}
}
:
public interface OnlineChecker {
boolean isOnline();
}
そして最もupvoted実装:
public class DefaultOnlineChecker implements OnlineChecker {
private final ConnectivityManager connectivityManager;
public DefaultOnlineChecker(ConnectivityManager connectivityManager) {
this.connectivityManager = connectivityManager;
}
@Override
public boolean isOnline() {
NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
}
2番目にupvoted実装を独自のモジュールまたは他の場所で、あなたが望む実装をバインドするだけです:
@Module
public class OnlineCheckerModule {
@Provides
public OnlineChecker onlineChecker() {
Runtime runtime = Runtime.getRuntime();
return new ExperimentalOnlineChecker(runtime);
}
}
は、今すぐあなたの活動や断片の内側には、単にプロパティインジェクションを使用して注入することができます
@Inject OnlineChecker onlineChecker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super(savedInstanceState);
//perform injection with Dagger 2 and then you can use your
//OnlineChecker
}
あなたはそれがモジュールいることを実行したいと思うのはなぜ?その背後にある論理は何ですか? – azizbekian
Okhttp3キャッシュのインターネット接続を確認したかったのですが。私はokhttp3のモジュールを作成しているので –