Parse.com Android API和Android Dialog

Jay*_*ayu 0 java android parse-platform

我已将parse方法放在onCreate方法中.但我的问题是如何显示Android Loading ...对话框?

Parse.initialize(this, "a", "b");
ParseQuery query = new ParseQuery("Category");
query.findInBackground(new FindCallback() {
    @Override
    public void done(List<ParseObject> catObjects, ParseException arg1) {
        Log.d("Catlength", String.valueOf(catObjects.size()));
        for(int i =0; i<catObjects.size(); i++){
            Log.d("lengthName"+String.valueOf(i), String.valueOf(catObjects.get(i).getInt("Id")));
            Category category = new Category();
            category.Name= catObjects.get(i).getString("CatName");
            category.id= catObjects.get(i).getInt("Id");
            categories.add(category);
        }

        if(categories.size()>0){
            setListAdapter(new CategoryArrayAdapter(CategoryListActivity.this, R.layout.row_category, categories));
        }
        else{
            Toast.makeText(CategoryListActivity.this, "Our servers are busy. Hit refresh..", 3000).show();
        }

    }
});
Run Code Online (Sandbox Code Playgroud)

在上面的代码中一切正常,但我无法弄清楚如何显示对话框.

AsycTask也无法使用,因为解析sdk在后台调用自己的线程,在findInBackground执行完成之前,doInBackground完成Asyc线程.这就是我在主线程中调用它的原因.

结果我总是在我的ArrayList中没有结果.

有人可以赐教.

Joe*_*112 5

关于进度对话框,我遇到了同样的情况,尝试了一些技巧,最后宣布了一个ProgressDialog类成员:

protected ProgressDialog proDialog;
Run Code Online (Sandbox Code Playgroud)

然后创建了两个方法:

protected void startLoading() {
    proDialog = new ProgressDialog(this);
    proDialog.setMessage("loading...");
    proDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    proDialog.setCancelable(false);
    proDialog.show();
}

protected void stopLoading() {
    proDialog.dismiss();
    proDialog = null;
}
Run Code Online (Sandbox Code Playgroud)

在得到结果之后,在后台操作之前调用startLoading()并在后台操作中调用stopLoading().

startLoading();
    ParseUser.logInInBackground(userName.getText().toString(), hashedPass, new LogInCallback() {
        public void done(ParseUser user, ParseException e) {
            if (user != null) {
                Log.d(Constants.TAG, "User Loged in.");
                ParseManager.sCurrentUser = user;
                stopLoading();
                finish();
            } else {
                stopLoading();
                invalidCreds();
            }
        }
    }); 
Run Code Online (Sandbox Code Playgroud)

如果你想使用AsyncTask不要调用findInBackground()你可以使用find().你可以在api中查看它https://parse.com/docs/android/api/com/parse/ParseQuery.html#find()

希望这可以帮助.