我正在使用Android地图API编写一个Android应用程序。我有一个按钮调用当前位置,并尝试使用Geocoder getFromLocation函数打印地址。
当我点击按钮时,当我使用e.printStackTrace()
时,应用程序会爆炸。
以下是相关代码:
public void gpsToastButton(View view) {
Location gps = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (gps != null) {
int lat = (int) (gps.getLatitude() * 1E6);
int lng = (int) (gps.getLongitude() * 1E6);
Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault());
try {
List<Address> myList = myLocation.getFromLocation(lat, lng, 1);
String message = String
.format("gps:" + myList,
gps.getLongitude(), gps.getLatitude()
);
Toast.makeText(GoogleMapActivity.this, message, Toast.LENGTH_LONG)
.show();
} catch (IOException e) {
// TODO Auto-generated catch block
String message2 = String
.format("kein anschluss unter dieser nummer");
Toast.makeText(GoogleMapActivity.this, message2, Toast.LENGTH_LONG);
}
}
else{...
}
以及点击按钮后的LogCat:
03-07 05:16:33.318: E/AndroidRuntime(883): FATAL EXCEPTION: main
03-07 05:16:33.318: E/AndroidRuntime(883): java.lang.IllegalStateException: Could not execute method of the activity
03-07 05:16:33.318: E/AndroidRuntime(883): at android.view.View$1.onClick(View.java:2072)
03-07 05:16:33.318: E/AndroidRuntime(883): at android.view.View.performClick(View.java:2408)
03-07 05:16:33.318: E/AndroidRuntime(883): at android.view.View$PerformClick.run(View.java:8816)
03-07 05:16:33.318: E/AndroidRuntime(883): at android.os.Handler.handleCallback(Handler.java:587)
03-07 05:16:33.318: E/AndroidRuntime(883): at android.os.Handler.dispatchMessage(Handler.java:92)
03-07 05:16:33.318: E/AndroidRuntime(883): at android.os.Looper.loop(Looper.java:123)
03-07 05:16:33.318: E/AndroidRuntime(883): at android.app.ActivityThread.main(ActivityThread.java:4627)
03-07 05:16:33.318: E/AndroidRuntime(883): at java.lang.reflect.Method.invokeNative(Native Method)
03-07 05:16:33.318: E/AndroidRuntime(883): at java.lang.reflect.Method.invoke(Method.java:521)
03-07 05:16:33.318: E/AndroidRuntime(883): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-07 05:16:33.318: E/AndroidRuntime(883): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-07 05:16:33.318: E/AndroidRuntime(883): at dalvik.system.NativeStart.main(Native Method)
03-07 05:16:33.318: E/AndroidRuntime(883): Caused by: java.lang.reflect.InvocationTargetException
03-07 05:16:33.318: E/AndroidRuntime(883): at google.map.activity.GoogleMapActivity.gpsToastButton(GoogleMapActivity.java:64)
03-07 05:16:33.318: E/AndroidRuntime(883): at java.lang.reflect.Method.invokeNative(Native Method)
03-07 05:16:33.318: E/AndroidRuntime(883): at java.lang.reflect.Method.invoke(Method.java:521)
03-07 05:16:33.318: E/AndroidRuntime(883): at android.view.View$1.onClick(View.java:2067)
03-07 05:16:33.318: E/AndroidRuntime(883): ... 11 more
03-07 05:16:33.318: E/AndroidRuntime(883): Caused by: java.io.IOException: Service not Available
03-07 05:16:33.318: E/AndroidRuntime(883): at android.location.Geocoder.getFromLocation(Geocoder.java:117)
03-07 05:16:33.318: E/AndroidRuntime(883): ... 15 more
提前谢谢。
//编辑:好的,我现在解决了。我将IOException抛出到gpsToastButton类,并在最后一个else语句之后捕获它。谢谢你的帮助!
这个问题的关键是最后一个"由于"服务不可用"。
关于SO的另一个答案应该会有所帮助。
似乎"…任何没有Market、GMail等的设备都将丢失Geocoder后端"。