android - AWS Mobile Hub 示例项目中 PushManager 类的空对象引用

标签 android amazon-web-services nullpointerexception push-notification amazon-sns

我已经从 AWS Mobile Hub 下载了一个示例项目,其中集成了 SNS 推送服务。

在我现有的应用程序中,我将 com.amazonaws.mobile 包复制到我的应用程序 java 目录中。此外,我已将 AWS gradle 库添加到模块的 gradle 文件中,并将 meta-datareceiver 属性添加到我的 list 文件中。

在我的 MainActivity.java 中我有这段代码:

import com.amazonaws.mobile.AWSMobileClient;
import com.amazonaws.mobile.push.PushManager;

private PushManager pushManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    pushManager = AWSMobileClient.defaultMobileClient().getPushManager();
    toggleNotification(true);
}

toggleNotification 方法取自演示应用程序。有问题的部分是我初始化 pushManager (pushManager = AWSMobileClient...) 的行。这是日志:

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   Process: com.intap.snspushtest, PID: 25796
                                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.intap.snspushtest/com.intap.snspushtest.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.amazonaws.mobile.push.PushManager com.amazonaws.mobile.AWSMobileClient.getPushManager()' on a null object reference
                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253)
                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
                                                                       at android.app.ActivityThread.access$1100(ActivityThread.java:221)
                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                       at android.os.Looper.loop(Looper.java:158)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:7224)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                                                                    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.amazonaws.mobile.push.PushManager com.amazonaws.mobile.AWSMobileClient.getPushManager()' on a null object reference
                                                                       at com.intap.snspushtest.MainActivity.onCreate(MainActivity.java:29)
                                                                       at android.app.Activity.performCreate(Activity.java:6876)
                                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
                                                                       at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
                                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                       at android.os.Looper.loop(Looper.java:158) 
                                                                       at android.app.ActivityThread.main(ActivityThread.java:7224) 
                                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

它说 getPushManager() 是一个空对象引用,这很奇怪,因为在示例应用程序中它运行良好,而且我没有对复制的文件进行任何更改...

你能帮我解决这个问题吗?我仍在尝试弄清楚为什么它为空...

最佳答案

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.amazonaws.mobile.push.PushManager com.amazonaws.mobile.AWSMobileClient.getPushManager()' on a null object reference

这表示 AWSMobileClient.defaultMobileClient() 返回 null,因此无法调用 getPushManager()。必须先调用 AWSMobileClient.initializeMobileClientIfNecessary(context) 以初始化移动客户端,然后再调用 AWSMobileClient.defaultMobileClient()。初始化通常在 Application 类中执行,如下所示:

import android.support.multidex.MultiDexApplication;
import android.util.Log;

import com.amazonaws.mobile.AWSMobileClient;

/**
 * Application class responsible for initializing singletons and other common components.
 */
public class Application extends MultiDexApplication {

    private final static String LOG_TAG = Application.class.getSimpleName();

    @Override
    public void onCreate() {
        Log.d(LOG_TAG, "Application.onCreate - Initializing application...");
        super.onCreate();
        initializeApplication();
        Log.d(LOG_TAG, "Application.onCreate - Application initialized OK");
    }

    private void initializeApplication() {

        // Initialize the AWS Mobile Client
        AWSMobileClient.initializeMobileClientIfNecessary(getApplicationContext());

        // ... Put any application-specific initialization logic here ...
    }
}

关于android - AWS Mobile Hub 示例项目中 PushManager 类的空对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39550946/

相关文章:

android - 什么是本地 android SDK 中的 m2repository 文件夹?

Android:寻找复制/粘贴复杂对象的有效策略

java - 什么是NullPointerException,我该如何解决?

java - 页面上出现 NullPointerException

java - 为什么我总是收到空指针异常?

android - 有没有办法只混淆真实代码,而不混淆库?

android - 使用 Eclipse "Play"按钮调试游戏服务

amazon-web-services - "Missing credentials in config"使用 aws-amplify 存储

amazon-web-services - 亚马逊ECS API将获得1000本畅销书

python - 在 AWS 中部署 Django 应用程序。引发不允许的主机异常