我收到以下异常
09-19 18:09:36.551: E/AndroidRuntime(20608): FATAL EXCEPTION: Thread-2852
09-19 18:09:36.551: E/AndroidRuntime(20608): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
09-19 18:09:36.551: E/AndroidRuntime(20608): at android.os.Handler.<init>(Handler.java:121)
09-19 18:09:36.551: E/AndroidRuntime(20608): at android.widget.Toast$TN.<init>(Toast.java:317)
09-19 18:09:36.551: E/AndroidRuntime(20608): at android.widget.Toast.<init>(Toast.java:91)
09-19 18:09:36.551: E/AndroidRuntime(20608): at android.widget.Toast.makeText(Toast.java:233)
09-19 18:09:36.551: E/AndroidRuntime(20608): at com.mid.nash.activity.MapPageFragment$3$1.run(MapPageFragment.java:156)
09-19 18:09:36.551: E/AndroidRuntime(20608): at java.lang.Thread.run(Thread.java:856)
以下是我的代码
myLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
//check if the location is within boundaries.
GeoPoint currentlocation = myLocationOverlay.getMyLocation();
double latitude = (currentlocation.getLatitudeE6() / 1E6);
double longitude = (currentlocation.getLongitudeE6() / 1E6);
//check if user is witin boundry of Kew
if (latitude <= RESTRICTED_UPPERLEFT_LAT &&
latitude >= RESTRICTED_BOTTOMRIGHT_LAT &&
longitude >= RESTRICTED_UPPERLEFT_LNG &&
longitude <= RESTRICTED_BOTTOMRIGHT_LNG){
mapController.animateTo(myLocationOverlay.getMyLocation());
} else {
myLocationOverlay.disableMyLocation();
Toast.makeText(getActivity(), "You are out of scope.", Toast.LENGTH_LONG);
}
}
});
我提到this link认为这可能对我有所帮助。但我无法实现上述方法。
如何摆脱这种异常?
答案 0 :(得分:1)
问题是Runnable
正在一个没有Looper
的帖子上执行,而Toast
是发布Handler
所必需的。您需要做的是在MapPageFragment
中创建一个Toast
,您可以发送消息给它以显示Toast
。或者根本不使用{{1}},您可以实现更好的通知UI。
答案 1 :(得分:1)
我建议将Toast从Runnable中移出。
应该在主线程中使用其他UI元素调用Toast。昨天我遇到了一个问题,即后台线程被破坏而Toast从未关闭。它出现在主屏幕和其他任何地方,直到我强行删除应用程序的缓存内存... Toast很好但保留在主线程上。
作为一个注释,你不要打电话给show()
,所以Toast现在不会做任何事......