2011-10-24 15 views
2

データを取得するためにバックグラウンドでサービスを実行しています。私はそれを得る前に接続性をチェックしたいと思います。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 && netInfo.isConnected()) 
     {   
      return true;  
     }  
      return false; 
    } 
} 

これは素晴らしいです。しかし、それは

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() 

エラーを投げています「(もし!Functions.isOnline(C))」私はそれを変更した場合(NOの場合のWi-Fiのために)チェックするために、これは接続性を確認するための正しい方法は何ですか?

答えて

0

接続は正しくチェックされていますが、スレッディングにうんざりしています。生のスレッドにアクセスする代わりに、AsyncTaskまたはIntentServiceを試してみてください。あなたの特定のインスタンスのために、私はAsyncTaskにDataManagerを変更し、基本的にコードをrun()関数からそのままコピーし、doInBackground()メソッドに入れます。

+0

DataManagerスレッドはAsyncTaskにする必要がありますか? – user533844

+0

はい、もっと明確にするために私の編集を参照してください。 –

+0

よろしいですか?試してみます。 AsyncTaskとしてデータを取得することをお勧めしますか? – user533844

関連する問題