2016-08-23 24 views
0

データベースからデータを取得しようとしています。 データがデータベースからロードされている間に、progressDialogを表示します。android - タスクが終了するとProgressDialogが遅すぎる

私はAsyncTaskを拡張するクラスBgClassを使用しています。 preExecuteではダイアログを表示し、postExecuteではダイアログを閉じます。

しかし、データベースからデータが読み込まれた後でもダイアログが表示され、表示されなくなってしまいます。

public class BgClass extends AsyncTask<parameters>{ 

ProgressDialog dialog; 

BgClass(Context context){ 

    dialog = new ProgressDialog(context); 
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    dialog.setMessage("Loading ..."); 
    dialog.setIndeterminate(true); 
    dialog.setCanceledOnTouchOutside(false); 
} 

@Override 
protected doInBackground(parameter) { 

    //fetching entries from DB 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    dialog.show(); 

} 

@Override 
protected void onPostExecute(parameter) { 
    super.onPostExecute(ratingBackendlessCollection); 
    dialog.dismiss(); 
} 

}

PS - 私は正しくコンストラクタと呼ばれ、同じオブジェクトでも実行してきました。

これは、BgClassオブジェクトを呼び出すcallActivityまたはjavaファイルのコードです(無関係のコードが削除されました)。

public class SeeComments extends AppCompatActivity{ 

//variable initialisation 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.see_comments); 

    list = new ArrayList<>(); 

    btnLoadMore = new Button(this); 
    btnLoadMore.setText("Load More"); 

    lv_sc_cmnt.addFooterView(btnLoadMore); 

    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list); 

    lv_sc_cmnt.setAdapter(adapter); 

    context = this; 

    btnLoadMore.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      addMoreToList(); 
     } 
    }); 

    ActionBar ab = getSupportActionBar(); 
    ab.setDisplayHomeAsUpEnabled(true); 
} 

private void addMoreToList() { 

    offset+=pageSize; 

    if (list.size()<totalReviews) { 

     BgClass bgClass = new BgClass(resAll,pageSize,offset,this); 

     try { 
      resAll = bgClass.execute(resAll, null, null).get(); 
     }catch (InterruptedException e){ 
      Toast.makeText(this,e.getMessage(),Toast.LENGTH_LONG).show(); 
     }catch (ExecutionException e){ 
      Toast.makeText(this,e.getMessage(),Toast.LENGTH_LONG).show(); 
     } 

     // add loaded data to list 

     adapter.notifyDataSetChanged(); 
    } else { 
     Toast.makeText(this, "All reviews loaded", Toast.LENGTH_LONG).show(); 
    } 
} 

}

+0

このAsyncTaskと呼ばれるアクティビティをお手伝いしてください。 –

+1

あなたのタスクが長い操作でなければ、あなたはあなたの 'ProgressDialog'を見ることはできません。あるいは、あなたがテストしているデバイスがより新しい、より速い場合は、タスクはより速く完了します。 – Pztar

+0

このAsyncTaskを呼び出したアクティビティを追加しました。 – Himanshu

答えて

1

あなたはonProgressUpdateも上書きされている必要があります:

@Override 
protected void onProgressUpdate(Integer... progress) { 
    setProgressPercent(progress[0]); 
} 

setProgressPercent(int value) { 
    dialog.setMessage("Loaded value " + value); 
} 

参考:Android Dev site

+0

これはOPとの関連性が分かりません質問 – Shaishav

+0

これは動作しません。 – Himanshu

0

はonPreExecute

をあなたの進行状況を示すダイアログボックスを移動し、(getActivityを使用)のコンテキスト

@Override 
protected void onPreExecute() { 
    dialog = new ProgressDialog(getActivity()); 
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    dialog.setMessage("Loading ..."); 
    dialog.setIndeterminate(true); 
    dialog.setCanceledOnTouchOutside(false); 
    dialog.show(); 
} 
+0

私はそれを試して、これは動作しません。 – Himanshu

関連する問題