任何人都可以告诉我这个logcat有什么问题
06-23 11:09:12.060: ERROR/AndroidRuntime(1116): FATAL EXCEPTION: Speedometer
06-23 11:09:12.060: ERROR/AndroidRuntime(1116): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
06-23 11:09:12.060: ERROR/AndroidRuntime(1116): at android.os.Handler.<init>(Handler.java:121)
06-23 11:09:12.060: ERROR/AndroidRuntime(1116): at android.widget.Toast.<init>(Toast.java:68)
06-23 11:09:12.060: ERROR/AndroidRuntime(1116): at android.widget.Toast.makeText(Toast.java:231)
06-23 11:09:12.060: ERROR/AndroidRuntime(1116): at com.paad.whereami.WhereAmI.updateGUI(WhereAmI.java:883)
06-23 11:09:12.060: ERROR/AndroidRuntime(1116): at com.paad.whereami.WhereAmI.access$5(WhereAmI.java:860)
06-23 11:09:12.060: ERROR/AndroidRuntime(1116): at com.paad.whereami.WhereAmI$4.run(WhereAmI.java:845)
06-23 11:09:12.060: ERROR/AndroidRuntime(1116): at java.util.Timer$TimerImpl.run(Timer.java:284)
答案 0 :(得分:3)
您正在尝试在您创建的新线程中启动Android事件处理程序,例如onLocationChanged。在线程类的“run()”方法中,需要调用Looper.prepare(),注册事件处理程序,然后调用Looper.loop()。完成线程后,调用Looper.myLooper()。quit()方法退出。
示例:
public class MyActivity extends Activity {
private Thread thread = new ThreadClass();
private static Looper threadLooper = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Begin the location reading thread.
thread.start();
// do UI stuff in here
// never sleep in UI thread. Example only.
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// end the thread.
threadLooper.quit();
// quit the activity
this.finish();
}
private class ThreadClass extends Thread {
@Override
public void run() {
Looper.prepare();
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
MyLocationListener locListen = new MyLocationListener();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 0, locListen);
threadLooper = Looper.myLooper();
Looper.loop(); // loop until "quit()" is called.
// remove the update listener to prevent the locationManager from calling it.
locationManager.removeUpdates(locListen);
}
}
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
/* Do very intensive work here */
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
}
答案 1 :(得分:0)
你需要从ui线程中显示吐司。您可以在Activity上使用runOnUiThread方法执行此操作。 以下是示例Android: Toast in a thread
的说明