声明内容提供程序时Android中的NullPointerException

时间:2013-09-11 22:50:31

标签: java android android-contentprovider

在我的项目中声明Content Provider时,我遇到了一个奇怪的问题。我正在从我自己的另一个项目中复制类和Manifest声明。它在我的其他项目上运行正常。

这是我的Manifest的一部分:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.qr"
    android:installLocation="auto"
    android:versionCode="540"
    android:versionName="5.4" >

(...)

<application
        android:name=".Application"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:logo="@drawable/ic_launch" >

(...)

<provider
            android:name=".provider.HistoryProvider"
            android:authorities="com.example.qr.History"
            android:exported="true"
            android:multiprocess="true"
            android:readPermission="com.example.qr.History.read"
            android:writePermission="com.example.qr.History.write" />

(...)

    </application>
</manifest>

当我运行我的应用程序时,我得到了这个堆栈跟踪:

 FATAL EXCEPTION: main
 java.lang.NullPointerException
    at android.app.ActivityThread.installProvider(ActivityThread.java:4783)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4430)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4372)
    at android.app.ActivityThread.access$1300(ActivityThread.java:141)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1294)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5039)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)

这是整个堆栈跟踪。不包含“ com.example ”跟踪。当然,我的应用程序中的一些代码产生了这个但实际崩溃发生在Android中。

因为我自己的类没有包含在堆栈跟踪中,所以我真的不知道在哪里看。

我在使用Android 4.2的模拟器中运行代码,并且我将其与该版本Android的源代码进行了比较,因此我知道崩溃是在这一行的ActivityThread中生成的:

4782            ApplicationInfo ai = info.applicationInfo;
4783            if (context.getPackageName().equals(ai.packageName)) {

Here's a link to the source code of this class

如果我没有声明内容提供商(例如,如果我从我的清单中删除 ),该应用程序就可以正常运行。

我在Application类中添加了一些日志,以及主Activity类。崩溃是在任何一个发布之前产生的。

所以,我的问题是:我的代码中可以生成 context context.getPackageName() info。 applicationInfo 在安装过程中 null

修改

在模拟器中多次触发堆栈跟踪时,我只在跟踪之间得到这个:

09-11 23:10:21.250: E/AndroidRuntime(933):  at dalvik.system.NativeStart.main(Native Method)
09-11 23:10:21.470: D/dalvikvm(933): GC_CONCURRENT freed 142K, 9% free 2951K/3224K, paused 78ms+3ms, total 225ms
09-11 23:10:44.030: I/Process(933): Sending signal. PID: 933 SIG: 9
09-11 23:10:46.940: D/dalvikvm(947): GC_CONCURRENT freed 164K, 10% free 2711K/2996K, paused 13ms+114ms, total 201ms
09-11 23:10:47.170: I/ActivityThread(947): Pub com.example.qr.History: com.example.qr.provider.HistoryProvider
09-11 23:10:47.170: D/AndroidRuntime(947): Shutting down VM
09-11 23:10:47.170: W/dalvikvm(947): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
09-11 23:10:47.180: E/AndroidRuntime(947): FATAL EXCEPTION: main

0 个答案:

没有答案