#android
#Android
Вопрос:
У меня есть служба, работающая в фоновом режиме для получения данных. Я хотел бы проверить подключение перед его получением.
public class DataManager extends Thread {
static final long DELAY = 170000;
Context c;
String stop;
public DataManager(Context argContext) {
c = argContext;
stop = "F";
}
public void StopPlease()
{
stop = "T";
}
@Override
public void run() {
while (true) {
try {
if (stop=="F")
{
if(Functions.isOnline(c))
{
//run the data table loaders for each data type
Log.i("MobileViaNetData", "running aircraft data update");
DataLoader_Aircraft acloader = new DataLoader_Aircraft(c);
acloader.run();
Thread.sleep(DELAY);
}
else
{
Thread.sleep(DELAY);
Toast.makeText(c, "NOT CONNECTED AT THIS TIME", Toast.LENGTH_LONG).show();
}
}
else {
break;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Functions {
public static boolean isOnline(Context context)
{
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null amp;amp; netInfo.isConnected())
{
return true;
}
return false;
}
}
Это отлично работает. Но для проверки (при отсутствии Wi-Fi), если я изменю его на «если (! Функции.IsOnline (c))» выдает ошибку
10-24 13:59:57.970: ERROR/AndroidRuntime(2972): FATAL EXCEPTION: Thread-12
10-24 13:59:57.970: ERROR/AndroidRuntime(2972): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
ЭТО ПРАВИЛЬНЫЙ СПОСОБ ПРОВЕРКИ ПОДКЛЮЧЕНИЯ?
Ответ №1:
Вы правильно проверяете подключение, но у вас возникают проблемы с потоками. Вместо доступа к необработанным потокам вам следует попробовать использовать и AsyncTask или IntentService . Для вашего конкретного экземпляра я бы изменил DataManager на AsyncTask и в основном скопировал код дословно из вашей run()
функции и поместил его в ваш doInBackground()
метод.
Комментарии:
1. О, хорошо. Я постараюсь. Хорошая ли идея получать данные в виде AsyncTask?
2. Нет причин, по которым вы не можете.