2016-08-23 51 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 - 我已經正確調用構造函數,並用相同的對象也執行。

這是callActivity或調用BgClass對象的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