わからない問題があります。Android で簡単な進行状況ダイアログを表示したい。そこでAsyncTask
、コンストラクターでダイアログを作成して作成しました。ダイアログにメソッドを使用し、ダイアログonPreExceution
を破棄するメソッドを使用します。したがって、これまでのところ、これは私にとって完全に正しいように見えます。しかし、Nexus 7 でアプリを起動すると、ジョブが完了するまでダイアログが表示されません。つまり、ジョブの最後に 0.5 秒間表示されます...何が間違っているのでしょうか?initialise
onPostExecute
ご協力ありがとうございました ;)
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();
}
}
}
アップデート
これは私の新しい 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
価値はありません。