2015-06-21 76 views
0

时解析错误当运行该活动的第一次,单方面初始化(这是onCreate方法内)得好:的Android - 初始化活动

Parse.enableLocalDatastore(this); 
Parse.initialize(this, "...", "..."); 

然后,如果我按后退按钮并重新进入活动中,我得到一个错误:

java.lang.IllegalStateException: `Parse#enableLocalDatastore(Context)` must be invoked before `Parse#initialize(Context)` 

,我不明白为什么,因为Parse.enableLocalDatastore(this);Parse.initialize(this, "...", "...");之前。

好吧,好的。然后我试图检索enableLocalDatastore已完成时,与Parse.isInitialized()方法,但它是私人的,所以我不能使用它(以及一些其他解析变量,我可以使用)。

经过一段时间后,我发现如果我在新的Thread内调用这两种方法,它就可以工作。

我想知道为什么发生错误,为什么它用Thread解决。另外,有没有更好的方法来做到这一点?

下面的代码(修剪的重要组成部分):

public class RegisterActivity extends Activity { 

Button linkParse; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_register); 

    linkParse = (Button)findViewById(R.id.linkparse); 
    linkParse.setOnClickListener(new LinkParse()); 
    linkParse.setClickable(false); 

    try { 
     // Enable Local Datastore. 
     Parse.enableLocalDatastore(this); 
     Parse.initialize(this, "...", "...");   
    } catch(Exception e){ 
     Toast.makeText(RegisterActivity.this, "Parse not started.", Toast.LENGTH_SHORT).show(); 
     linkParse.setClickable(true); 
    } 

} 

class LinkParse implements View.OnClickListener{ 
    @Override 
    public void onClick(View v) { 
     Thread thread = new Thread(new StartParse()); 
     thread.start(); 
    } 
} 

class StartParse implements Runnable{ 
    @Override 
    public void run() { 
     try { 
      // Enable Local Datastore. 
      Parse.enableLocalDatastore(RegisterActivity.this); 
      Parse.initialize(RegisterActivity.this, "...", "..."); 
     } catch(Exception e){ 

     } 
    } 
} 
} 
+1

这两种方法都应该在扩展'Application'的类中调用。 http://www.devahead.com/blog/2011/06/extending-the-android-application-class-and-dealing-with-singleton/ – cYrixmorten

回答

2

你应该从活动

Parse.initialize(this, "....","...."); 
Parse.enableLocalDatatore(this); 

调用代码这两行从应用程序类不是有没有必要初始化了多次,全局应用程序状态意味着在应用程序类中。

创建类和扩展应用程序,你所创建的应用程序类后,有您的初始化代码解析

public class MyApplication extends Application{ 
    @Override 
    public void onCreate(){ 
     super.onCreate() 
     Parse.initialize(this, "....", "...."); 
     Parse.enableLocalDatastore(this) 
    } 
} 

。将它添加到您的AndroidManifest.xml中

<application android:icon="@drawable/icon" 
android:label="@stringapp_name" 
android:name="MyApplication">