我有外部類擴展AsyncTask
從網站獲取字符串解析爲JSONObject
或JSONArray
。目前,我正在使用方法.get()
獲得結果,但應用程序正在丟幀,等待服務器響應。我想使用它可重用,因爲我從許多不同的類獲取數據。 我的AsyncTask類:如何從AsyncTask獲取結果而不阻塞UI線程?
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()'返回異步任務實例本身,而不是'String'或任何其他類型的結果。 –