2013-03-08 113 views
0

我已经将解析方法放入onCreate方法中。但我的问题是如何显示Android加载...对话框?Parse.com Android API和Android对话框

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也为解析SDK调用自己的线程在后台和findInBackground执行完毕前,doInBackground完成ASYC线程。这就是为什么我在主线程中调用它的原因。

因此,我总是得不到我的ArrayList结果。

有人请赐教。

回答

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()

希望对你有所帮助。

+0

我已经使用了类似的东西,但使用'AsycTask'。感谢您的答案:) – 2013-03-15 05:10:43

+0

我试过这种方式,但我相信进度对话框正在使用UI线程,不是吗?我尝试过使用AsyncTask,但速度至少慢了4倍 – 2014-02-24 07:07:16

+0

这使得下载速度非常慢...因为它在UI线程上运行,所以不是一个可行的解决方案 – Johnny 2015-01-09 22:19:26

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. 
    } 
}); 
+0

我没有读或保存文件。只是阅读明文数据。我会尝试'progresscallback()'无论如何 – 2013-03-08 18:05:25

+0

似乎不会与'findInBackgroun'一起工作https://parse.com/docs/android/api/com/parse/class-use/ProgressCallback.html – 2013-03-08 18:21:10

+0

我不会downvote,因为这在技术上是正确的,但由于功能被破坏,这不起作用。 – Johnny 2015-01-09 22:15:46