2014-12-18 2 views
5

Я получаю много сообщений от пользователей о моем приложении, сбой. По-видимому, постоянная ошибка связана с моей инициализацией parse.com, однако я настроил ее так, как описано в руководстве по синтаксическому анализу.Parse.com runtime crash - android

вот Трассировка стека:

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

      } 
     } 

    } 
+0

'Caused by: java.lang.RuntimeException: applicationContext имеет значение null. Вы должны вызвать Parse.initialize (context, applicationId, clientKey) перед использованием библиотеки Parse. Похоже, вы не инициализируете его должным образом. – Tyler

+0

@ Tyler, если это так, есть ли у вас какие-либо идеи о том, как правильно его инициализировать? – scb998

+0

Вы можете попробовать, что я ответил на это: http://stackoverflow.com/questions/27367362/i-cant-receive-push-notifications-in-app-from-parse/27367613#27367613, чтобы узнать, работает ли он – bjiang

ответ

9

Move вы 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 метода, который не будет называться.

+0

Хорошо, так что, видя, что у меня есть только файлы .java для моих макетов, я создаю новый класс, как вы описали выше? – scb998

+1

@ scb998 Да, вам нужно создать его. Вы можете узнать [Blank project] (https://parse.com/downloads/android/Parse-Starter-Project/latest) из Parse, чтобы узнать, как это будет. – gio

+0

Итак, теперь, когда я создал два класса, откуда мне их называть? – scb998