Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 城市航空_Android_Urbanairship.com - Fatal编程技术网

Android 城市航空

Android 城市航空,android,urbanairship.com,Android,Urbanairship.com,我在安装我的应用程序时获得以下NPE。请帮忙 07-22 16:27:06.380: E/UA AP(6071): Unable to takeOff automatically 07-22 16:27:06.385: D/AndroidRuntime(6071): Shutting down VM 07-22 16:27:06.385: W/dalvikvm(6071): threadid=1: thread exiting with uncaught exception (group=0x4

我在安装我的应用程序时获得以下NPE。请帮忙

07-22 16:27:06.380: E/UA AP(6071): Unable to takeOff automatically
07-22 16:27:06.385: D/AndroidRuntime(6071): Shutting down VM
07-22 16:27:06.385: W/dalvikvm(6071): threadid=1: thread exiting with uncaught exception (group=0x415db2a0)
07-22 16:27:06.385: E/AndroidRuntime(6071): FATAL EXCEPTION: main
07-22 16:27:06.385: E/AndroidRuntime(6071): java.lang.RuntimeException: Unable to start receiver com.urbanairship.push.GCMPushReceiver: java.lang.NullPointerException
07-22 16:27:06.385: E/AndroidRuntime(6071): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2277)
07-22 16:27:06.385: E/AndroidRuntime(6071): at android.app.ActivityThread.access$1500(ActivityThread.java:140)
07-22 16:27:06.385: E/AndroidRuntime(6071): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
07-22 16:27:06.385: E/AndroidRuntime(6071): at android.os.Handler.dispatchMessage(Handler.java:99)
07-22 16:27:06.385: E/AndroidRuntime(6071): at android.os.Looper.loop(Looper.java:137)
07-22 16:27:06.385: E/AndroidRuntime(6071): at android.app.ActivityThread.main(ActivityThread.java:4898)
07-22 16:27:06.385: E/AndroidRuntime(6071): at java.lang.reflect.Method.invokeNative(Native Method)
07-22 16:27:06.385: E/AndroidRuntime(6071): at java.lang.reflect.Method.invoke(Method.java:511)
07-22 16:27:06.385: E/AndroidRuntime(6071): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
07-22 16:27:06.385: E/AndroidRuntime(6071): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
07-22 16:27:06.385: E/AndroidRuntime(6071): at dalvik.system.NativeStart.main(Native Method)
07-22 16:27:06.385: E/AndroidRuntime(6071): Caused by: java.lang.NullPointerException
07-22 16:27:06.385: E/AndroidRuntime(6071): at com.urbanairship.UAirship.getPackageName(Unknown Source)
07-22 16:27:06.385: E/AndroidRuntime(6071): at com.urbanairship.push.GCMPushReceiver.onReceive(Unknown Source)
07-22 16:27:06.385: E/AndroidRuntime(6071): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2270)
07-22 16:27:06.385: E/AndroidRuntime(6071): ... 10 more
即使我得到这个例外,我能够启动应用程序。运行时:

url -X POST -u "<app id>:<mastersecret>" -H "Content-Type: application/json" --data '{"android": {"alert": "TestPushtoAPID"}, "apids": ["****4"]}' https://go.urbanairship.com/api/push/
尽管如此,我无法在我的设备上看到任何通知

Part of Android Manifest 
<!-- REQUIRED for Urban Airship GCM--> 
<receiver android:name="com.urbanairship.CoreReceiver" /> 
<receiver android:name="com.urbanairship.push.GCMPushReceiver" android:permission="com.google.android.c2dm.permission.SEND"> 
    <intent-filter> 
        <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
    </intent-filter>
</receiver>

从OP的评论和阅读源代码来看,它似乎被错误地实例化了

根据文档中的说明,如果
IntentReceiver
BroadcastReceiver
的子类,则应执行以下操作:

class IntentReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent argIntent) {
        // Handle it here
    }
}
它的实际实例化形式如下:

IntentReceiver intentRcvr = new BroadcastReceiver();
PushManager.enablePush();
PushManager.shared().setIntentReceiver(intentRcvr); // TAKE NOTE!
// Rest of code.

这使我怀疑您没有正确设置AndroidManifest.xml:

07-22 16:27:06.385:E/AndroidRuntime(6071):由以下原因引起:java.lang.NullPointerException
07-22 16:27:06.385:E/AndroidRuntime(6071):在com.urbanairship.UAirship.getPackageName(未知来源)

您是否已将IntentReceiver的完全限定包名称添加到AndroidManifest.xml中?如果我把我的注释掉,我就知道你的确切错误了

<!-- OPTIONAL, if you want to receive push, push opened and registration completed intents -->
<receiver android:name="com.XXXX.IntentReceiver" />


@t0mm13b不幸的是,我无法编译您的代码-您无法实例化
BroadcastReceiver
,并且不接受实例化对象,只有
Class问题似乎是因为特定的apid连接到了我用于调试的不同UA应用程序。我创建了一个新应用程序,并假设相同的apid也可以连接到此应用程序。事实并非如此。我试着使用一个新设备,它工作正常。

我的NPE和你一样,但原因/解决方案不同。在我的例子中,我在AndroidManifest.xml中有正确的UA服务/接收器,但忘记调用UAirship.takeOff()。在我包含以下代码后,NPE消失了:

    UAirship.takeOff(application, AirshipConfigOptions.loadDefaultOptions(application));
    PushManager.enablePush();

实际上,问题在于图书馆的正确实施

起飞
以及其他配置代码应该在所用类的
OnCreate
中。这是我们大多数人出错的地方。我们将其放在前台
活动
s
OnCreate

接下来,您需要在应用程序标记的
AndroidManifest.xml
中使用
Application
类的完全限定名,如下所示:

 <application
        android:name="com.popa.app.MyApplication"
        ..

你试过什么?你发现了什么?空指针异常是因为您使用的变量未在
中的某个位置实例化,无法启动receiver com.urbanairship.push.GCMPushReceiver:java.lang.NullPointerException 07-22 16:27:06.385:E/AndroidRuntime(6071):位于android.app.ActivityThread.HandlerReceiver(ActivityThread.java:2277)
您的广播接收器是否已在您的清单中声明或实例化?请显示代码以进行确认。OP:请停止在评论中发布代码,重新编辑您的问题,因为这些评论使代码无法读取。您的清单中是否确实有此代码?您缺少结束标记…OP:我已编辑并重新格式化了您的代码,请删除包含代码的注释以清理此问题。我发现了上述NPE的另一个(类似)原因。为了提高性能,我将对takeOff()的调用延迟到我的应用程序启动后30秒,然后我又看到了NPE。在我看来,即使未调用takeOff(),UrbanAirship代码也会注册它的GCMPushReceiver。然后,GCMPushReceiver对GCM广播做出反应,如果尚未调用takeOff(),则抛出NPE。这可能是UA人员在编写UA Android库时犯的一个错误,也可能是他们因GCM的工作方式而做出的妥协。
    UAirship.takeOff(application, AirshipConfigOptions.loadDefaultOptions(application));
    PushManager.enablePush();
 <application
        android:name="com.popa.app.MyApplication"
        ..