2014-02-14 28 views
0

在Android中,我使用Timer類來檢查移動設備中的每秒無線連接,因爲我想打開GPS,當設備不使用WiFi時。但它顯示了致命的Timer-0 RunTimeException。Android致命Timer-0 RunTimeException

這裏是我的定時器功能

public void checkWifi() 
{ 
    Timer timer = new Timer(); 
    TimerTask hourlyTask = new TimerTask() { 
     @Override 
     public void run() 
     { 
      boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) 
          .isConnectedOrConnecting(); 
      if (!isWifi) { 
       locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 
      } 
     } 
    }; 
    timer.schedule(hourlyTask, 0l, 1000); 
} 

,這裏是我的logcat

02-14 02:52:53.126: E/AndroidRuntime(1539): FATAL EXCEPTION: Timer-0 
    02-14 02:52:53.126: E/AndroidRuntime(1539): Process: com.example.gpsco11wifialert, PID: 1539 
    02-14 02:52:53.126: E/AndroidRuntime(1539): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
    02-14 02:52:53.126: E/AndroidRuntime(1539): at android.os.Handler.<init>(Handler.java:200) 
    02-14 02:52:53.126: E/AndroidRuntime(1539): at android.os.Handler.<init>(Handler.java:114) 
    02-14 02:52:53.126: E/AndroidRuntime(1539): at android.location.LocationManager$ListenerTransport$1.<init>(LocationManager.java:221) 
    02-14 02:52:53.126: E/AndroidRuntime(1539): at android.location.LocationManager$ListenerTransport.<init>(LocationManager.java:221) 
    02-14 02:52:53.126: E/AndroidRuntime(1539): at android.location.LocationManager.wrapListener(LocationManager.java:844) 
    02-14 02:52:53.126: E/AndroidRuntime(1539): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:857) 
    02-14 02:52:53.126: E/AndroidRuntime(1539): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:454) 
    02-14 02:52:53.126: E/AndroidRuntime(1539): at com.example.gpsco11wifialert.GpsC011Wifi$MyLocationListener$4.run(GpsC011Wifi.java:213) 
    02-14 02:52:53.126: E/AndroidRuntime(1539): at java.util.Timer$TimerImpl.run(Timer.java:284) 
+0

所以嘗試添加Looper.prepare()內的Runnnable – nikis

+0

遐我試了一下,但還是同樣的錯誤.. –

回答

0

我知道這是不是在所有可行的,但你仍然可以試試這個來避免這個錯誤。或者如果你不想使用這個,那麼你可以嘗試Asynctask類來解決你的問題。

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

這將刪除您的錯誤。

+0

不過它顯示那麼在我的情況下,同樣的錯誤 –

+0

它完美地工作正常。你在哪裏定義了這個代碼。 – InnocentKiller

+0

我從位置偵聽器的onLocationChanged(位置)內調用此方法。 –

相關問題