我遇到了一個我不明白的問題。我想在Android中顯示一個簡單的進度對話框。所以我創建了一個AsyncTask
並在構造函數中創建對話框。我使用方法onPreExceution
至initialise
對話框和onPostExecute
方法我使對話失效。所以直到現在,這看起來對我來說完全正確。但是當我在Nexus 7上啓動應用程序時,該對話框在作業完成之前不會顯示。所以在工作結束時顯示半秒鐘......我做錯了什麼?進度對話框僅在作業已完成時顯示
謝謝你的幫助;)
public class ParseHTMLCodeNew extends AsyncTask<String, Void, String> {
ProgressDialog dialog;
public ParseHTMLCodeNew(Context context) {
dialog = new ProgressDialog(context);
}
@Override
protected void onPreExecute() {
//einrichten des Wartedialogs
dialog.setTitle("Bitte warten!");
dialog.setMessage("Die Kommentare werden vom Server geladen.");
dialog.show();
}
@Override
protected String doInBackground(String params) {
InputStream is = null;
String data = "";
try
{
URL url = new URL(params[0]);
is = url.openStream();
data = new Scanner(is).useDelimiter("//html//").next();
}
catch (Exception e) {
e.printStackTrace();
}
return data;
}
@Override
protected void onPostExecute(String result) {
//Dialog beenden RSS Feed ist fertig geparst
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
}
UPDATE
這是我的新的AsyncTask:
public class ParseHTMLCodeNew extends AsyncTask<String, String, String> {
ProgressDialog dialog;
private final OnCompleteTaskListener onCompleteTaskListener;
public interface OnCompleteTaskListener {
void onComplete(String data);
}
public ParseHTMLCodeNew(Context context, OnCompleteTaskListener taskListener) {
onCompleteTaskListener = taskListener;
dialog = new ProgressDialog(context);
}
@Override
protected void onPreExecute() {
//einrichten des Wartedialogs
dialog.setTitle("Bitte warten!");
dialog.setMessage("Die Kommentare werden vom Server geladen.");
dialog.show();
}
@Override
protected String doInBackground(String... params) {
InputStream is = null;
String data = "";
try
{
URL url = new URL(params[0]);
is = url.openStream();
data = new Scanner(is).useDelimiter("//html//").next();
}
catch (Exception e) {
e.printStackTrace();
}
return data;
}
@Override
protected void onPostExecute(String result){
onCompleteTaskListener.onComplete(result);
//Dialog beenden RSS Feed ist fertig geparst
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
}
,我稱它是這樣的:
new ParseHTMLCodeNew(this,new OnCompleteTaskListener() {
@Override
public void onComplete(String data) {
gData = data;
}
}).execute(url);
正如我評論你的文章,data
沒有價值。
這項工作需要多長時間才能完成? – DeeV
告訴我們你是怎麼調用這段代碼的,看起來沒問題 – 2012-12-08 16:21:06
我這樣調用代碼: data = new ParseHTMLCodeNew(CommentActivity.this).execute(url).get(); – Irazzer