Hey there good forum people, I was hoping you could help me with a really
frustrating issue I am having...
Basically, I am using an AsyncTask to run code that connects to a URL,
which executes a PHP script, and then grabs the output. Within the
AsyncTask class I can get the information from the URL that I need fine,
but I cannot seem to move it from the AsyncTask back to my normal code.
My custom AsyncTask class looks like this:
> private class ScriptExecutionTask extends AsyncTask<URL, Boolean, String> {
>
>
>
> private boolean executionComplete = false;
>
>
>
> private String result = null;
>
>
>
> @Override
>
> protected void onPreExecute() {
>
> scriptExecutionInProgress = true;
>
> }
>
>
>
> @Override
>
> protected String doInBackground(URL... scriptUrl) {
>
> try {
>
> URL script = scriptUrl[0];
>
> URLConnection scriptConnection = script.openConnection();
>
> BufferedReader resultReader = new BufferedReader(new
>> InputStreamReader(scriptConnection.getInputStream()));
>
> StringBuilder resultBuilder = new StringBuilder();
>
> String line;
>
> while((line = resultReader.readLine()) != null) {
>
> resultBuilder.append(line);
>
> }
>
> resultReader.close();
>
> executionComplete = true;
>
> return resultBuilder.toString();
>
> } catch (IOException ex) {
>
> ex.printStackTrace(System.err);
>
> return null;
>
> }
>
> }
>
>
>
> @Override
>
> protected void onPostExecute(String result) {
>
> this.result = result;
>
> scriptExecutionInProgress = false;
>
> }
>
>
>
> protected String getResult() {
>
> return result;
>
> }
>
>
>
> protected boolean isExecutionComplete() {
>
> return executionComplete;
>
> }
>
>
>
> }
>
>
And this is the code I use to execute the script and then wait for it to
return the output:
>
// Execute the script
URL script = new URL(url);
ScriptExecutionTask scriptExecutionTask = new ScriptExecutionTask();
scriptExecutionTask.execute(script);
long timeAtExecute = System.currentTimeMillis();
// Wait for script to execute, or time out if it takes too long
while(!scriptExecutionTask.isExecutionComplete() &&
> System.currentTimeMillis() - timeAtExecute <= executionTimeOut);
latestResult = scriptExecutionTask.getResult();
return latestResult;
The main issue is that 'latestResult' will always be returned as null from
the above code. When I System.out.println() the result within the AsyncTask
I get exactly what I wanted. But for some reason, I can't grab the result
from the AsyncTask and store it in latestResult.
Thank you very much to anyone who can advise me, this has been bothering me
for a while now :)
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en