Paul Paul - 6 months ago 29
Android Question

How to get a string back from AsyncTask?

I have the following class:

public class getURLData extends AsyncTask<String, Integer, String>{

@Override
protected String doInBackground(String... params) {
String line;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(params[0]);

HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
line = EntityUtils.toString(httpEntity);

} catch (UnsupportedEncodingException e) {
line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
} catch (MalformedURLException e) {
line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
} catch (IOException e) {
line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
}
return line;
}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}

}


And I am trying to call it like this:

String output = null;
output = new getURLData().execute("http://www.domain.com/call.php?locationSearched=" + locationSearched);


But the output variable isn't getting data, instead I am getting an error:

Type mismatch: cannot convert from AsyncTask<String,Integer,String> to String

Answer

The method execute returns the AynscTask itself, you need to call get:

output =
    new getURLData()
        .execute("http://www.domain.com/call.php?locationSearched=" + locationSearched)
        .get();

However, if you do that you just turned your async task into a sync one, as get waits if needed for the result to be avilable.

Reference: AsyncTask.get