当应用程序正在运行并打开时,push notification
运行完美,但如果在应用程序关闭或未运行时发送推送通知,则应用程序崩溃并且"应用程序X不幸停止"显示。
我粘贴logcat输出以查看错误详细信息,请参阅log cat中的最后一项:
12-14 01:13:25.865: E/AndroidRuntime(25004): FATAL EXCEPTION: main
12-14 01:13:25.865: E/AndroidRuntime(25004): Process: com.ifreedomapp.v3, PID:25004
12-14 01:13:25.865: E/AndroidRuntime(25004): java.lang.RuntimeException: Unable to create service com.parse.PushService: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context com.parse.ParsePlugins$Android.applicationContext()' on a null object reference
12-14 01:13:25.865: E/AndroidRuntime(25004): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2887)
12-14 01:13:25.865: E/AndroidRuntime(25004): at android.app.ActivityThread.-wrap4(ActivityThread.java)
12-14 01:13:25.865: E/AndroidRuntime(25004): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)
12-14 01:13:25.865: E/AndroidRuntime(25004): at android.os.Handler.dispatchMessage(Handler.java:102)
12-14 01:13:25.865: E/AndroidRuntime(25004): at android.os.Looper.loop(Looper.java:148)
12-14 01:13:25.865: E/AndroidRuntime(25004): at android.app.ActivityThread.main(ActivityThread.java:5417)
12-14 01:13:25.865: E/AndroidRuntime(25004): at java.lang.reflect.Method.invoke(Native Method)
12-14 01:13:25.865: E/AndroidRuntime(25004): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
12-14 01:13:25.865: E/AndroidRuntime(25004): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-14 01:13:25.865: E/AndroidRuntime(25004): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context com.parse.ParsePlugins$Android.applicationContext()' on a null object reference
12-14 01:13:25.865: E/AndroidRuntime(25004): at com.parse.PushService.onCreate(PushService.java:230)
12-14 01:13:25.865: E/AndroidRuntime(25004): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2877)
12-14 01:13:25.865: E/AndroidRuntime(25004): ... 8 more
12-14 01:13:50.802: I/Process(25004): Sending signal. PID: 25004 SIG: 9
重现的步骤: (我在我的活动的OnCrete中添加了解析初始化,并按照解析文档中的说明编辑了我的清单)
之后我编译并运行我的应用程序。 1.应用程序已打开,我从解析面板发送推送通知,收到并运行良好。 2.然后我关闭应用程序并进入android主屏幕,然后我从解析面板发送另一个推送通知。 3.通知没有出现,但是" X app不幸停止了#34;被展示。 (X = app name) 4.再次,如果我打开应用程序并从面板发送通知,它会被收到,但如果应用程序关闭或在后台,它不会显示通知,它会崩溃。
Github上的解决方案:
Parse.initialize(Context)应该在您的Application#onCreate()中完成,而不是您的Activity#onCreate(Bundle)根据我们的文档:http://parse.com/docs/android/api/com/parse/Parse.html#initialize(android.content.Context)
由于推送通知会唤醒应用程序,而不是您的活动,这意味着您需要在初始化之前获取解析代码。
我这样做了,我现在尝试将初始化添加到应用程序的OnCreate而不是活动,
但是在运行我的应用程序之后,它没有获得任何推送通知,它只是没有注册设备。
以下是我的代码的一部分:
public class StatusActivity extends
com.MainBase.TabbedActivityBase {
public void onCreate() {
Parse.initialize(this, "", ""); // added my app credentials, removed here
ParseInstallation.getCurrentInstallation().saveInBackground();
Parse.enableLocalDatastore(this);
}
public static final String BANNER_FILE_NAME = "bannerImage";
Context mContext;
private ImageView m_banner;
// private boolean m_tunnelWholeDevicePromptShown = false;
private InterstitialAd interstitial;
ImageView sharebtn;
public StatusActivity() {
super();
m_eventsInterface = new Events();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.main);
// m_banner = (ImageView)findViewById(R.id.banner);
m_tabHost = (TabHost) findViewById(R.id.tabHost);
m_toggleButton = (ImageView) findViewById(R.id.toggleButton);
toggleText = (TextView) findViewById(R.id.textViewToggle);
................ further code
任何人都可以帮助我。
GitHub问题:https://github.com/ParsePlatform/Parse-SDK-Android/issues/299
答案 0 :(得分:0)
试试这个 1.创建一个任何名称的类,例如扩展应用程序的常量
public class Constants extends Application {
@Override
public void onCreate() {
super.onCreate();
Parse.initialize(this, "", "");
ParseInstallation.getCurrentInstallation().saveInBackground();
}
}
<application android:name=".Constants">
并删除活动中解析的所有初始化。