Note that there are some explanatory texts on larger screens.

plurals
  1. POAsyncTask - Return a String in postExecute to the Activity, which started the Async Task without blocking the UI Thread
    text
    copied!<p>I have an Activity, which starts an AsyncTask with an Implemented process dialog. That works fine! But i want to get a String return when the asyncTask has finished. So i have to return something in the onPostExecute - Method. That result(string) i want to grab in the Activity, which started the AsyncTask. I do not want to use .get() because it blocks the UI thread.</p> <p>What do i have to write into onPostExecute and the Activity grab the string from doInBackground?</p> <p>Thank you for any kind of help to solve this problem ;)</p> <p>Now with Code:</p> <pre><code>class BgDL extends AsyncTask&lt;String, Integer, String&gt; { String finishString=""; private Context context; ProgressDialog pdialog; public BgDL(Context cxt) { //get the context (usually "this" from Activity / otherwise progressdialog wont show up! context = cxt; pdialog = new ProgressDialog(context); } @Override protected String doInBackground(String... strings) { OutputStream output; ByteArrayOutputStream baos = null; try { URL url = new URL(strings[0]); URLConnection connection = url.openConnection(); connection.connect(); int fileLength = connection.getContentLength(); InputStream input = new BufferedInputStream(url.openStream()); if (strings[1]=="toString") { // write byte to string if a file is not given baos= new ByteArrayOutputStream(); output = new DataOutputStream(baos); } else { //otherwise to string output = new FileOutputStream(strings[1]); } byte data[] = new byte[1024]; long total = 0; int count; while ((count = input.read(data)) != -1) { total += count; publishProgress((int) (total * 100 / fileLength)); output.write(data, 0, count); } output.flush(); output.close(); input.close(); if (strings[1]=="toString") { finishString = baos.toString(); // } // only write byte to string if a file is not given } catch (Exception e) {log.d("ex",e.toString()); } return finishString; } @Override protected void onPreExecute() { super.onPreExecute(); pdialog.setTitle("Please wait"); pdialog.setIndeterminate(false); pdialog.setMax(100); pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pdialog.show(); } @Override protected void onProgressUpdate(Integer... progress) { super.onProgressUpdate(progress); pdialog.setProgress(progress[0]); } protected void onPostExecute(String...finishString) { pdialog.dismiss();//!!!!!!!!!finishString i want to pass over to my Activity, which started this asynctask with .execute(); } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload