2

私の Android アプリでは、Parse.com オンライン データベースを使用してデータを保存しています。onCreate()私のアクティビティのメソッドでは、メソッドを使用しfindInBackground()て非同期的にデータを読み込みます。

このfindInBackground()メソッドは、最初はアクティビティに再接続せず、永久に実行を続けます。ただし、電話のホームボタンをクリックしてからアプリを再ロードすると、findInBackGround()メソッドは最終的に再接続してデータをロードします。

私はしたいと思います:

  1. findInBackground()アプリをリロードする必要なく、メソッドをアクティビティに再接続させる
  2. データの読み込み中に読み込みイメージ (アニメーション gif ?) を表示します。

私の問題について何かアドバイスはありますか?

よろしくお願いいたします。

アレックス

PS: 私はすでに解析の find() メソッドを試しました。アプリと自動的に再接続しても、データが読み込まれるまで呼び出し元のアクティビティの UI をブロックするため、正しい方法ではないと思います。

================================================== =============================== 私はついに私の質問に対する答えを見つけました:

  1. findCallBack クラスのメソッド内に listView を設定するコードを配置しました。したがって、findInBackground() メソッドの結果は、実行が終了した後にのみ使用するようにしています。以前は、findCallBack クラスの外側に listView を設定するコードを配置していたので、コード内で後で実行されたとしても、実際には findInBackground() が終了する前に実行されたため、機能しませんでした。

  2. 読み込み中の画像については、このサイトで見つかった回答を使用しました。これは、適切な時点 (findInBackground() の前後) で ProgressDialog をアクティブ化および停止することで構成されています。

                        startLoading(); //Show the loading image
                        query.findInBackground(new FindCallback() {
                            public void done(List<ParseObject> allQuestionsVal, ParseException e) {
                                if (e == null) {                           
                                    for(int i = 0; i<=allQuestionsVal.size()-1;i++){
    
                                        ParseObject questionVal = allQuestionsVal.get(i);   
                                        Question question = new Question(questionVal.getObjectId(), 
                                                questionVal.getString("FIELD1"), 
                                                questionVal.getString("FIELD2"),
    
                                        allQuestions.add(question);
                                    }                       
                                    stopLoading(); //Remove the loading image
    
                                    //Use the result of the Query (allQuestions) to populate listVIew
                                    ListView list = (ListView) findViewById(R.id.all_questions);        
                                    AllQuestionsAdapter adapter=new AllQuestionsAdapter(AllQuestions.this, allQuestions);
                                    list.setAdapter(adapter);               
    
                                } 
                                else {      
                                        stopLoading(); //Remove the loading image
                                    }
                                }
                            }); 
    

    保護された 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;
    } 
    

PS: コメントは大歓迎です :)

4

0 に答える 0