1

AWS Mobile HubからSNSプッシュサービスを統合したサンプルプロジェクトをダウンロードしました。AWS Mobile HubサンプルプロジェクトのPushManagerクラスのヌルオブジェクトリファレンス

私の既存のアプリでは、com.amazonaws.mobileパッケージを自分のアプリケーションjavaディレクトリにコピーしました。さらに、モジュールのグラデーションファイルにAWSグラデーションライブラリを追加し、マニフェストファイルにmeta-datareceiverという属性を追加しました。私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方法は、デモアプリケーションから取得されます。問題のある部分は、私がpushManagerpushManager = 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()はそれは素晴らしい作品サンプルアプリケーションであるため、奇妙ではnullオブジェクト参照であることを述べている、と私はコピーされたファイルには何も変更していない:ここではログがあります

私を助けてくれませんか? java.lang.NullPointerExceptionが:私はまだによって引き起こさ

答えて

1

...それがnullである理由を把握しようとしている仮想メソッドを呼び出そうと「com.amazonaws.mobile.push.PushManager com.amazonaws.mobile NULLオブジェクト参照

これに.AWSMobileClient.getPushManagerは()」AWSMobileClient.defaultMobileClient()が呼び出されませんでした()getPushManager従ってヌルと戻されていることを示します。 AWSMobileClient.initializeMobileClientIfNecessary(コンテキスト)は、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 ... 
    } 
} 
関連する問題