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