2013-03-08 40 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