android 应用程序在 2.3 设备上运行,在 4.1 上崩溃(重新发布)

Posted

技术标签:

【中文标题】android 应用程序在 2.3 设备上运行,在 4.1 上崩溃(重新发布)【英文标题】:android app runs on 2.3 device, crashes on 4.1 (reposting) 【发布时间】:2012-10-03 05:21:38 【问题描述】:

我有一个在 2.3 版设备和一个特定的 4.1 模拟器上完美运行的 android 应用程序。它在其他 4.1 模拟器以及 4.1 Google Nexus 设备上崩溃。

有什么想法吗?

这和尺寸、分辨率等有关系吗?

这是我在 4.1 模拟器上运行时的 logcat 输出。实际上代码很大,所以不能把它放在这里。任何提示都会很棒。然后我可以把所需的代码sn-p。

10-01 11:42:30.404: E/Trace(623): error opening trace file: No such file or directory (2) 
10-01 11:42:30.754: D/dalvikvm(623): GC_FOR_ALLOC freed 126K, 3% free 8126K/8327K, paused 42ms, total 44ms
10-01 11:42:30.794: D/AndroidRuntime(623): Shutting down VM 
10-01 11:42:30.794: W/dalvikvm(623): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 
10-01 11:42:30.804: E/AndroidRuntime(623): FATAL EXCEPTION: main 
10-01 11:42:30.804: E/AndroidRuntime(623): java.lang.RuntimeException: Unable to start activity ComponentInfoorg.example.android_compliance/com.example.android_compliance.MainActivity: java.lang.NullPointerException 
10-01 11:42:30.804: E/AndroidRuntime(623):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
10-01 11:42:30.804: E/AndroidRuntime(623):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
10-01 11:42:30.804: E/AndroidRuntime(623):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
10-01 11:42:30.804: E/AndroidRuntime(623):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
10-01 11:42:30.804: E/AndroidRuntime(623):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-01 11:42:30.804: E/AndroidRuntime(623):  at android.os.Looper.loop(Looper.java:137) 
10-01 11:42:30.804: E/AndroidRuntime(623):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
10-01 11:42:30.804: E/AndroidRuntime(623):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-01 11:42:30.804: E/AndroidRuntime(623):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-01 11:42:30.804: E/AndroidRuntime(623):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-01 11:42:30.804: E/AndroidRuntime(623):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-01 11:42:30.804: E/AndroidRuntime(623):  at dalvik.system.NativeStart.main(Native Method) 
10-01 11:42:30.804: E/AndroidRuntime(623): Caused by: java.lang.NullPointerException     
10-01 11:42:30.804: E/AndroidRuntime(623):  at com.example.android_compliance.MainActivity.onCreate(MainActivity.java:261)
10-01 11:42:30.804: E/AndroidRuntime(623):  at android.app.Activity.performCreate(Activity.java:5008) 
10-01 11:42:30.804: E/AndroidRuntime(623):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
10-01 11:42:30.804: E/AndroidRuntime(623):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
10-01 11:42:30.804: E/AndroidRuntime(623):  ... 11 more 
10-01 11:43:33.693: I/Process(623): Sending signal. PID: 623 SIG: 9

【问题讨论】:

com.example.android_compliance.MainActivity.onCreate(MainActivity.java:261) 中有什么内容? 另外,我们可以看看你的清单吗? 【参考方案1】:

您是否尝试在清单文件中应用应用的 SDK 版本范围?

例如,如下所示的行:

<uses-sdk android:minSdkVersion="7" android:maxSdkVersion="15"/>

【讨论】:

【参考方案2】:

我认为您可能需要对您的 AndroidManifest 文件进行一些更改。他们更改了一些权限等。

【讨论】:

嗯...我使用了很多权限...对哪些特定权限有任何帮助?我 cd 在线搜索,但任何方向都会使它更容易......谢谢! 我已经找到了问题所在。我使用的函数之一返回 4.1 的空值。将在一段时间内提供详细信息。在接下来的几个小时内不允许回答我自己的问题! 所以你知道为什么你的函数在 api16 中返回 null 了吗? android.provider.Settings.System.TEXT_SHOW_PASSWORD 应该返回 1 或 0。如果我在 4.1 上运行应用程序并启用密码可见设置..它会崩溃。如果设置被禁用,它会完美运行。运行一次后,即使更改设置后也能顺利运行...返回所需的 0 或 1。 我正在添加一个额外的案例来捕获空值..但是这不会发生 shd 吗?而不仅仅是模拟器..我认为它也发生在 ICS 设备上。在朋友的关系上测试过一次。立即访问它以确认我的理论..【参考方案3】:

所以这里是在 4.1 上返回 null 的方法

public String visiblepassword() 
        String inputm = android.provider.Settings.System.getString(getContentResolver(), android.provider.Settings.System.TEXT_SHOW_PASSWORD);
        return inputm;

        

非常奇怪的是,它仅在一种情况下返回 null ......当我第一次在设备上安装应用程序并启用可见密码设置时。所以如果我先安装并禁用设置,它工作正常。安装后,即使我更改设置并重新运行应用程序,它也能正常工作。初始安装后,它会返回相应的 1 或 0。

有什么想法吗?

【讨论】:

不是真的,我创建了一些特殊情况来处理这种情况。 我需要一段时间才能获得确切的代码,但我会尽快回复您。 我检查了我的代码。我所做的只是添加一个额外的 case 检查返回的值是否为 null。如果是这样,我已经明确地做到了 1. 代码:if(inputm==null)inputm="1";。你可以随心所欲地处理空值,但这根本不是一个合适的解决方案!

以上是关于android 应用程序在 2.3 设备上运行,在 4.1 上崩溃(重新发布)的主要内容,如果未能解决你的问题,请参考以下文章

android 2.3 上的推送通知崩溃。

我的应用程序在 Android 4.4 上运行良好,但在 2.3 上崩溃。甚至没有开始

Google Maps v2 - 应用程序未安装在 2.3 设备上

UI 线程卡在 2.3 设备上

Android chromecast 在 2.3 上崩溃

Canvas:尝试在 Android 2.3 上使用回收的位图 RuntimeException