Parse.com运行时崩溃 - android

时间:2014-12-18 02:23:18

标签: android parse-platform push-notification

我收到很多用户关于我的应用程序崩溃的报告。常量错误似乎与我的parse.com初始化有关,但是,我已按照解析教程中的说明进行了设置。

这是Stack Trace:

java.lang.RuntimeException: Unable to start receiver com.parse.ParseBroadcastReceiver: java.lang.RuntimeException: applicationContext is null. You must call Parse.initialize(context, applicationId, clientKey) before using the Parse library.
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2580)
at android.app.ActivityThread.access$1700(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5292)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: applicationContext is null. You must call Parse.initialize(context, applicationId, clientKey) before using the Parse library.
at com.parse.Parse.checkContext(Parse.java:606)
at com.parse.Parse.getApplicationContext(Parse.java:214)
at com.parse.ManifestInfo.getContext(ManifestInfo.java:322)
at com.parse.ManifestInfo.getPackageManager(ManifestInfo.java:330)
at com.parse.ManifestInfo.getPackageInfo(ManifestInfo.java:356)
at com.parse.ManifestInfo.deviceSupportsGcm(ManifestInfo.java:441)
at com.parse.ManifestInfo.getPushType(ManifestInfo.java:210)
at com.parse.PushService.startServiceIfRequired(PushService.java:168)
at com.parse.ParseBroadcastReceiver.onReceive(ParseBroadcastReceiver.java:19)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2573)
... 10 more

这是我的初始化代码:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_screen);
        Parse.initialize(this, "hGG5RdgNVdI7eCeZynV32lWYXywQRHkpp5zLdY7Q", "TwmNbpBYEt4u3euE3lzNIgwyroSl8RPGF2dJFsPv");

        ParseInstallation.getCurrentInstallation().saveInBackground();

任何人都能看到导致此错误的原因,以及如何修复它?

下面是我的接收者代码:

public static class Receiver extends ParsePushBroadcastReceiver {
        private String notificationText;
        private Boolean notificationreceived = false;
        public Receiver(){
        }
        private static final String TAG = "MyNotificationsReceiver";

        @Override
        public void onPushOpen(Context context, Intent intent) {
            Log.e("Push", "Clicked");
            Intent i = new Intent(context, HomeScreen.class);
            notificationreceived = true;
            i.putExtra("alert",notificationText);
            i.putExtra("alertreceived", notificationreceived);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
            Scb998.scb988b=true;

                try {
                    JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data"));

                    Scb998.msg = json.getString("alert");


                } catch (JSONException e) {
                    Log.d(TAG, "JSONException: " + e.getMessage());

            }
        }

    }

1 个答案:

答案 0 :(得分:9)

Parse初始化转移到App班级(从Application扩展)

public class App extends Application {
   @Override
   public void onCreate() {
        super.onCreate();
        Parse.initialize(this, "hGG5RdgNVdI7eCeZynV32lWYXywQRHkpp5zLdY7Q", "TwmNbpBYEt4u3euE3lzNIgwyroSl8RPGF2dJFsPv");
        ParseInstallation.getCurrentInstallation().saveInBackground();
    }
}

当然,请将其称为AndroidManifest.xml

<application
    android:name=".app.App"
    ....
</application>

接下来是崩溃的原因。当您的应用程序处于后台时,它可能会被系统杀死。来自Google guide

  

保存当前对用户不可见的活动的进程(已调用活动的onStop()方法)。这些过程对用户体验没有直接影响,系统可以随时终止它们以回收前台,可见或服务进程的内存。通常有许多后台进程在运行,因此它们保存在LRU(最近最少使用的)列表中,以确保具有用户最近看到的活动的进程是最后被杀死的进程。如果活动正确实现其生命周期方法并保存其当前状态,则终止其进程将不会对用户体验产生明显影响,因为当用户导航回活动时,活动将恢复其所有可见状态。有关保存和恢复状态的信息,请参阅“活动”文档。

当您的应用收到推送通知时,将不会初始化解析,因为您在活动onCreate方法初始化它,该方法将不会被调用。