0

メソッド内に 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();
        }

    }
});

上記のコードではすべて正常に動作しますが、ダイアログを表示する方法がわかりませんでした。

AsycTaskparse sdk がバックグラウンドで独自のスレッドを呼び出し、findInBackground実行が終了する前doInBackgroundに Asyc スレッドを完了するため、使用することもできません。そのため、メインスレッドで呼び出しました。

その結果、ArrayList には常に結果が得られません。

誰か教えてください。

4

2 に答える 2

5

私は進行状況ダイアログに関して同じ状況にあり、いくつかのトリックを試し、最終的に ProgressDialog クラスメンバーを宣言しました:

protected ProgressDialog proDialog;

次に、2 つのメソッドを作成しました。

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 に答える