奇怪的应用程序无法在不同的手机上运行
Weird App not working on different mobile
我在 Samsung Mobile 上开发了一个 Google 地图相关应用程序,并在 Play 商店中发布,其中显示了大约 7000 种支持的设备。当我在三星手机上下载该应用程序时,它运行良好,但无法在 Moto 和索尼手机上运行。
当我尝试使用 Moto 移动设备进行调试时,它显示 "Shutting Down VM"
06-20 00:17:25.276 457-457/com.mycompany.mypackage D/AndroidRuntime﹕ Shutting down VM
06-20 00:17:25.281 457-457/com.mycompany.mypackage E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.mycompany.mypackage, PID: 457
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mycompany.mypackage/com.mycompany.mypackage.MapsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2225)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
at android.app.ActivityThread.access0(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ContextWrapper.getPackageName(ContextWrapper.java:131)
at android.location.GeocoderParams.<init>(GeocoderParams.java:50)
at android.location.Geocoder.<init>(Geocoder.java:83)
at com.mycompany.mypackage.MapsActivity.<init>(MapsActivity.java:96)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1572)
at android.app.Instrumentation.newActivity(Instrumentation.java:1088)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2215)
答:针对上述怪异问题,
我遇到了上面讨论的非常奇怪的问题,由于 Geocoder,我终于弄明白了。上面问题的解决方法很简单如下图
Geocoder gc = new Geocoder(this, Locale.getDefault());
public class MapsActivity extends FragmentActivity implements .... {
...............
Geocoder gc = new Geocoder(this, Locale.getDefault());
@Override
protected void onCreate(Bundle savedInstanceState) {
............
}
............
}
在上面的代码片段中全局定义了Geocoder。
这不适用于不同的设备。仅适用于三星设备。我想出的解决方案最终适用于所有设备(在三星、Moto、索尼上测试过)。
public class MapsActivity extends FragmentActivity implements .... {
...............
@Override
protected void onCreate(Bundle savedInstanceState) {
............
}
public void send(View view) {
try {
Geocoder gc = new Geocoder(this, Locale.getDefault());
List<Address> list = gc.getFromLocationName(message, 1);
.........}
}
............
}
在上面的代码片段中,Geocoder 在函数内本地定义。
这个解决方案适合我。我希望将来有人遇到同样的问题,这个解决方案可能会有所帮助。
谢谢
我在 Samsung Mobile 上开发了一个 Google 地图相关应用程序,并在 Play 商店中发布,其中显示了大约 7000 种支持的设备。当我在三星手机上下载该应用程序时,它运行良好,但无法在 Moto 和索尼手机上运行。
当我尝试使用 Moto 移动设备进行调试时,它显示 "Shutting Down VM"
06-20 00:17:25.276 457-457/com.mycompany.mypackage D/AndroidRuntime﹕ Shutting down VM
06-20 00:17:25.281 457-457/com.mycompany.mypackage E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.mycompany.mypackage, PID: 457
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mycompany.mypackage/com.mycompany.mypackage.MapsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2225)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
at android.app.ActivityThread.access0(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ContextWrapper.getPackageName(ContextWrapper.java:131)
at android.location.GeocoderParams.<init>(GeocoderParams.java:50)
at android.location.Geocoder.<init>(Geocoder.java:83)
at com.mycompany.mypackage.MapsActivity.<init>(MapsActivity.java:96)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1572)
at android.app.Instrumentation.newActivity(Instrumentation.java:1088)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2215)
答:针对上述怪异问题,
我遇到了上面讨论的非常奇怪的问题,由于 Geocoder,我终于弄明白了。上面问题的解决方法很简单如下图
Geocoder gc = new Geocoder(this, Locale.getDefault());
public class MapsActivity extends FragmentActivity implements .... {
...............
Geocoder gc = new Geocoder(this, Locale.getDefault());
@Override
protected void onCreate(Bundle savedInstanceState) {
............
}
............
}
在上面的代码片段中全局定义了Geocoder。 这不适用于不同的设备。仅适用于三星设备。我想出的解决方案最终适用于所有设备(在三星、Moto、索尼上测试过)。
public class MapsActivity extends FragmentActivity implements .... {
...............
@Override
protected void onCreate(Bundle savedInstanceState) {
............
}
public void send(View view) {
try {
Geocoder gc = new Geocoder(this, Locale.getDefault());
List<Address> list = gc.getFromLocationName(message, 1);
.........}
}
............
}
在上面的代码片段中,Geocoder 在函数内本地定义。
这个解决方案适合我。我希望将来有人遇到同样的问题,这个解决方案可能会有所帮助。
谢谢