0

我收到以下异常

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);
        }
    }
});

我提到了这个链接,认为这可能对我有帮助。但我无法实现上述方法。

如何摆脱这个异常?

4

2 回答 2

1

我建议将 Toast 从 Runnable 中移出。

Toast 应该在主线程中与其他 UI 元素一起调用。昨天我遇到了一个问题,后台线程被破坏并且 Toast 从未关闭。它出现在主屏幕和其他任何地方,直到我强行删除应用程序的缓存内存...... Toast 很好,但将它们保留在主线程上。

作为一个注释,你没有打电话show(),所以 Toast 目前不会做任何事情......

于 2012-09-19T17:51:03.613 回答
1

问题是Runnable正在执行的线程没有Looper发布Toast. 您需要做的是在您的文件中创建一个HandlerMapPageFragment您可以向它发送消息以显示Toast. 或者根本不使用 a Toast,您可以实现更好的通知 UI。

于 2012-09-19T17:44:10.763 回答