Android - 初始化活动时解析错误

时间:2015-06-21 21:41:23

标签: android parse-platform

第一次运行活动时,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){

        }
    }
}
}

1 个答案:

答案 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">