Мне было интересно, может ли кто-нибудь объяснить проблему, с которой я столкнулся. Ниже приведен сегмент кода, который я в настоящее время положить в каждом из моих классов, чтобы проверить, если Android сеть телефона доступна:Обнаружение сети андроида через внешний метод нестатического класса
private boolean isNetworkAvailable() {
ConnectivityManager manager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
boolean isAvailable = false;
if(networkInfo != null && networkInfo.isConnected()) {
isAvailable = true;
}
return isAvailable;
}
Это работает очень хорошо, когда размещена в нижней части каждого класса как частный метод, однако это не слишком сильно влияет на принцип DRY, поэтому я попытался поместить его во внешний класс под названием «appHelpers» и сделать его общедоступным, а затем просто вызвать класс appHelpers каждый раз, когда я хочу использовать метод :
public boolean isNetworkAvailable() {
...
}
Теперь, если я пытаться вызвать метод непосредственно из своего класса, например, так:
if(appHelpers.isNetworkAvailable()) {
...
}
Я получаю знакомый «Не могу сделать статическую ссылку на нестатический метод isNetworkAvailable() из типа appHelpers». Однако, если я попытаться сделать статический метод внутри appHelpers(), я получаю красную линию под «getSystemService (контекст ...) аспект этой линии:
ConnectivityManager manager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
С отчетом об ошибках, как» Не удается сделать статическую ссылку к нестационарному методу getSystemService (String) из типа ContextWrapper ".
Я просто не могу понять, в чем проблема, и я не собираюсь решать проблему. Кто-нибудь знает об этом? Мои оценки заблаговременно.
Отличный материал, спасибо вам, Эрик! Я думал, что это проблема, связанная с тем, что я делаю это публичным, а не частным - я не знаю, что это такое, но Контекст меня смущает. Спасибо, что помогли. –