0

我已将解析方法放在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();
        }

    }
});

上面的代码一切正常,但我不知道如何显示对话框。

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

结果,我的 ArrayList 中总是没有结果。

有人可以启发我。

4

2 回答 2

5

关于进度对话框,我处于同样的情况,尝试了一些技巧,最后只是声明了一个 ProgressDialog 类成员:

protected ProgressDialog proDialog;

然后创建了两个方法:

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;
}

并在后台操作之前调用 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();
            }
        }
    }); 

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

希望这可以帮助。

于 2013-03-14T17:20:43.423 回答
0

通过将 ProgressCallback 传递给 saveInBackground 和 getDataInBackground,使用 ParseFile 很容易获得上传和下载的进度。例如:

byte[] data = "Working at Parse is great!".getBytes();
ParseFile file = new ParseFile("resume.txt", data);

file.saveInBackground(new SaveCallback() {
  public void done(ParseException e) {
    // Handle success or failure here ...
  }
}, new ProgressCallback() {
  public void done(Integer percentDone) {
    // Update your progress spinner here. percentDone will be between 0 and 100.
  }
});
于 2013-03-08T17:59:51.797 回答