私はHttpConnection
を開き、doInBackground
機能でJSONをダウンロードするためにAsyncTask
を実行しています。Android ProgressDialogの終了が遅すぎる
は、ここに私のAsyncTaskです:
public class AsyncQueryTask extends AsyncTask<URL, Void, String>{
String jsonString = "";
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(LoginActivity.this);
progressDialog.setCancelable(false);
progressDialog.setMessage("Getting Ready...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setProgress(0);
progressDialog.show();
}
@Override
protected String doInBackground(URL... urls) {
URL restURL = urls[0];
try {
//--------------------------------------------
// Some initialization
//--------------------------------------------
HttpURLConnection urlCon = (HttpURLConnection) restURL.openConnection();
InputStream in = urlCon.getInputStream();
Scanner scan = new Scanner(in).useDelimiter("\\A");
jsonString = scan.hasNext()? scan.next() : "";
try{
JSONArray bookArr = new JSONArray(jsonString);
for(int i=0;i<bookArr.length();i++){
// Some JSON string processing...
}
} catch(Exception e){
Log.e("Err", "@Activity");
e.printStackTrace();
}
//----------------------------------------------------
return jsonString;
} catch(IOException ioe){
ioe.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
progressDialog.dismiss();
}
}
そして、私はここでそれを呼び出す:onPostExecute()
でそれをあなたが見ることができるように、私はonPreExecute()
で正しくprogressDialogを初期化
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
URL url = // URL for fetching JSON string
if (/*Some condition*/) {
//----------------------------------------------
// Some other tasks
//----------------------------------------------
AsyncQueryTask fbqt = new AsyncQueryTask();
fbqt.execute(url);
Intent intent = new Intent(context, NextActivity.class);
startActivity(intent);
}
}
、およびdismiss()
。
問題進捗ダイアログは第二の一部分のみのために表示されることであり、それは直ちに完全doInBackground()
セクションにそれが有しているタスクを実行することなく、次のアクティビティに転送するアプリを引き起こし、終了します。
doInBackground()
スレッドが完了するまでprogressDialogを最後にするにはどうすればよいですか?
私はAsyncTaskを実行した後、LoginActivityはすでにで終わっており、次のアクティビティを開始する必要があります。 AsyncTaskの実行後に 'startActivity()'関数を呼び出せない場合はどこで呼び出すべきですか? – JeobMallari
@JeobMallariしかし、あなたはasynckタスクが終了した後、 'NextActivity'を起動する必要がありますか?私はそれが終了し、 'NextActivty'を起動するまで待つことを希望しますか? –
@JeobMallariこれをチェックしてください[回答](http://stackoverflow.com/a/43690935/5993410) –