2015-05-09 34 views
14

所以我遵循Parse SDK网站的快速入门指南中的指示。该应用第一次运行良好。但是,当我最小化应用程序并从任务切换器再次运行它时,它会关闭。解析错误:解析#enableLocalDatastore(Context)`必须在`Parse#initialize(Context)'之前调用`

该错误对我没有任何意义。 logcat的 -

05-09 08:57:40.611 19419-19419/com.example.shubhamkanodia.bookmybook E/CrashReporting﹕ ParseCrashReporting caught a RuntimeException exception for com.example.shubhamkanodia.bookmybook. Building report. 
05-09 08:57:40.626 19419-19419/com.example.shubhamkanodia.bookmybook E/CrashReporting﹕ Handling exception for crash 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.shubhamkanodia.bookmybook/com.example.shubhamkanodia.bookmybook.MainActivity}: java.lang.IllegalStateException: `Parse#enableLocalDatastore(Context)` must be invoked before `Parse#initialize(Context)` 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
      at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3947) 
      at android.app.ActivityThread.access$900(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5254) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
    Caused by: java.lang.IllegalStateException: `Parse#enableLocalDatastore(Context)` must be invoked before `Parse#initialize(Context)` 
      at com.parse.Parse.enableLocalDatastore(Parse.java:104) 
      at com.example.shubhamkanodia.bookmybook.MainActivity.onCreate(MainActivity.java:21) 
      at android.app.Activity.performCreate(Activity.java:5990) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
            at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3947) 
            at android.app.ActivityThread.access$900(ActivityThread.java:151) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5254) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Mainactivity.java

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if(!ParseCrashReporting.isCrashReportingEnabled()) 
      ParseCrashReporting.enable(this); 

     Parse.enableLocalDatastore(this); //Its already before initialize 
     Parse.initialize(this, "XXX", "XXX"); 
     ParseInstallation.getCurrentInstallation().saveInBackground(); 
     ParseAnalytics.trackAppOpenedInBackground(getIntent()); 
    } 

回答

23

你可以有一个单独的类,这样做初始化的东西。因此,创建一个ParseApplication类,延伸Application

public class ParseApplication extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     ParseCrashReporting.enable(this); 
     Parse.enableLocalDatastore(this); 
     Parse.initialize(this, "xxx", "xxx"); 
    } 
    } 

而且在AndroidManifest.xml中添加ParseApplication类应用

<application 
     android:name="com.example.parsetry.ParseApplication" // you should replace this based on your package 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
+2

我有同样的问题。你能否解释一下,如何把它放在一个单独的课堂上会影响问题? – YumeApps

+1

当您将初始化放置在主活动的onCreate()中时,只要此活动onCreate()不再被调用,就会工作。上述文章的工作原理是不将一次性初始化放入Activity中,而是放在具有不同生命周期的Application中(如https://tinyurl.com/q4bqoex所示),并且只会调用一次。 (通过使用类似单例的模式可以达到相同的效果)。 –

+2

我认为这不是一个解决的答案。即使我已在应用程序的OnCreate函数中启用本地数据存储并初始化(此处为“xxx”,“xxx”),我也得到了相同的错误 – P1x