2014-12-18 10 views
5

Ich bekomme eine Menge Berichte von Benutzern über meine App abstürzt. Der konstante Fehler scheint mit meiner parse.com-Initialisierung in Verbindung zu stehen. Ich habe ihn jedoch wie im Parsing-Tutorial beschrieben eingerichtet.Parse.com Runtime Absturz - Android

hier ist der 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 

und hier ist meine Initialisierung Code:

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

     ParseInstallation.getCurrentInstallation().saveInBackground(); 

Kann jemand sehen, was diesen Fehler verursacht, und wie man es beheben?

unten ist mein Empfängercode:

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()); 

      } 
     } 

    } 
+0

'verursacht durch: java.lang.RuntimeException: applicationContext ist null. Sie müssen Parse.initialize (context, applicationId, clientKey) aufrufen, bevor Sie die Parse-Bibliothek verwenden. Sieht so aus, als ob Sie es nicht richtig initialisieren. – Tyler

+0

@Tyler Wenn das der Fall ist, haben Sie irgendwelche Ideen, wie Sie es richtig initialisieren? – scb998

+0

Sie können versuchen, was ich hier beantwortet habe: http://stackoverflow.com/questions/27367362/i-cant-receive-push-notifications-in-app-from-parse/27367613#27367613 um zu sehen, ob es funktioniert – bjiang

Antwort

9

Verschieben Sie Parse Initialisierung in Ihre App Klasse (extended von Application)

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

Und natürlich darauf verweisen Ihre AndroidManifest.xml

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

Grund des Absturzes ist Nächster. Wenn sich Ihre App im Hintergrund befindet, kann sie vom System beendet werden. Von Google guide

Verfahren eine Aktivität halten, die für den Benutzer nicht sichtbar ist zur Zeit (die Aktivität des OnStop() -Methode aufgerufen wurde). Diese Prozesse haben keinen direkten Einfluss auf die Benutzererfahrung und das System kann sie jederzeit beenden, um Speicher für einen Vordergrund-, Sichtbar- oder Dienstprozess zurückzugewinnen. In der Regel werden viele Hintergrundprozesse ausgeführt, sodass sie in einer LRU-Liste (Least Recently Used) gespeichert werden, um sicherzustellen, dass der Prozess mit der Aktivität, die zuletzt vom Benutzer gesehen wurde, zuletzt gelöscht wird. Wenn eine Aktivität ihre Lebenszyklusmethoden korrekt implementiert und ihren aktuellen Status speichert, hat das Löschen ihres Prozesses keine sichtbaren Auswirkungen auf die Benutzererfahrung. Wenn der Benutzer zu der Aktivität zurück navigiert, stellt die Aktivität den gesamten sichtbaren Status wieder her. Informationen zum Speichern und Wiederherstellen von Status finden Sie im Dokument Aktivitäten.

Wenn Sie erhält App Benachrichtigung drücken, dann analysieren nicht initialisiert werden, weil Sie es an Aktivität onCreate Methode initialisieren, die aufgerufen wird, nicht.

+0

Ok, da ich nur .java Dateien für meine Layouts habe, erstelle ich eine neue Klasse wie oben beschrieben? – scb998

+1

@ scb998 Ja, Sie müssen es erstellen. Sie können [Leeres Projekt] (https://parse.com/downloads/android/Parse-Starter-Project/latest) von Parse lernen, um zu sehen, wie es sein würde. – gio

+0

Jetzt, wo ich die zwei Klassen erstellt habe, wo muss ich sie anrufen? – scb998