我已经从 AWS Mobile Hub 下载了一个示例项目,其中集成了 SNS 推送服务。
在我现有的应用程序中,我将 com.amazonaws.mobile
包复制到我的应用程序 java
目录中。此外,我已将 AWS gradle 库添加到模块的 gradle 文件中,并将 meta-data
和 receiver
属性添加到我的 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/