第一次运行活动时,Parte初始化(在onCreate方法中)很顺利:
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()
完成时检索,但它是私有的,所以我不能使用它(以及我可以使用的其他一些Parse变量)。
过了一段时间后,我发现如果我在新的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){
}
}
}
}
答案 0 :(得分: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">