У меня есть внешний класс, расширяющий AsyncTask
, чтобы получить строку с сайта, чтобы разобрать ее как JSONObject
или JSONArray
. В настоящее время я использую метод .get()
, чтобы получить результат, но приложение отбрасывает фреймы, ожидая ответа сервера. Я хочу использовать его повторно, потому что я получаю данные из разных классов. Мой AsyncTask класс:Как получить результат от AsyncTask без блокировки потока пользовательского интерфейса?
public class JsonTask extends AsyncTask<String, String, String> {
protected String doInBackground(String...params) {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
Log.d("Response: ", "> Establishing Connection");
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line + "\n");
Log.d("Response: ", "> " + line);
}
return buffer.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}}
Теперь я получаю данные просто:
String result = new JsonTask().execute(url).get();
@RichArt - Возможно, потому что 'AsyncTask.execute()' возвращает сам экземпляр async-задачи, а не 'String' или какой-либо другой результат. –