2014-12-18 1 views
5

ricevo molti segnalazioni da parte degli utenti sulla mia interruzione dell'app. L'errore costante sembra essere associato all'inizializzazione di parse.com, tuttavia, l'ho impostato come descritto nel tutorial di analisi.Arresto anomalo di Parse.com - android

Ecco l'Analisi dello stack:

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 

e qui è il mio codice di inizializzazione:

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

     ParseInstallation.getCurrentInstallation().saveInBackground(); 

Qualcuno può vedere che cosa sta causando questo errore, e come risolvere il problema?

sotto è il mio codice ricevitore:

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

'Causato da: java.lang.RuntimeException: applicationContext è null. Devi chiamare Parse.initialize (context, applicationId, clientKey) prima di utilizzare la libreria Parse. Sembra che tu non lo inizializzi correttamente. – Tyler

+0

@Tyler se questo è il caso, hai qualche idea su come inizializzarlo correttamente? – scb998

+0

Si può provare quello che ho risposto su questo: http://stackoverflow.com/questions/27367362/i-cant-receive-push-notifications-in-app-from-parse/27367613#27367613 per vedere se funziona – bjiang

risposta

9

Sposta si Parse inizializzazione nella vostra App classe (esteso da Application)

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

E naturalmente si riferiscono ad essa il vostro AndroidManifest.xml

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

La causa del crash è Il prossimo. Quando la tua app è in background, può essere uccisa dal sistema. Da Google guide

Un processo che contiene un'attività che non è attualmente visibile all'utente (è stato chiamato il metodo onStop() dell'attività). Questi processi non hanno alcun impatto diretto sull'esperienza utente e il sistema può eliminarli in qualsiasi momento per recuperare la memoria per un processo in primo piano, visibile o di servizio. Di solito ci sono molti processi in background in esecuzione, quindi sono mantenuti in un elenco LRU (usato meno di recente) per garantire che il processo con l'attività che è stata vista più di recente dall'utente sia l'ultimo ad essere ucciso. Se un'attività implementa correttamente i suoi metodi del ciclo di vita e salva il suo stato corrente, uccidere il suo processo non avrà un effetto visibile sull'esperienza utente, perché quando l'utente torna all'attività, l'attività ripristina tutto il suo stato visibile. Vedere il documento Attività per informazioni sul salvataggio e il ripristino dello stato.

Quando si riceve la notifica app spingere, quindi analizzare non verranno inizializzate, perché si inizializza in attività onCreate metodo, che non verrà chiamato.

+0

Ok, visto che ho solo file .java per i miei layout, creo una nuova classe come descritto sopra? – scb998

+1

@ scb998 Sì, è necessario crearlo. Puoi imparare [Progetto vuoto] (https://parse.com/downloads/android/Parse-Starter-Project/latest) da Parse, per vedere come sarebbe. – gio

+0

Quindi ora che ho creato le due classi, da dove devo chiamarle? – scb998