我有一個對象,與一個detailsURL字符串聯繫。在那個網址是一些JSON,有更多關於我需要設置的聯繫信息。我試圖做到這一點的AsyncTask的方法是這樣的:Android - 如何正確設置AsyncTask從URL中獲取JSON數據?
class detailDownloader extends AsyncTask<String, Void, Void> {
String detail;
private contact c;
public detailDownloader(String detail, contact c) {
this.c = c;
this.detail = detail;
}
protected Void doInBackground(String... urls) {
String url = urls[0];
Log.d("contact", "1");
String s;
try {
InputStream in = new java.net.URL(url).openStream();
Log.d("contact", "2");
BufferedReader br2 = null;
br2 = new BufferedReader(new InputStreamReader(in, "UTF-8"));
StringBuilder sb2 = new StringBuilder();
Log.d("contact", "3");
while((s = br2.readLine()) != null) {
sb2.append(s);
}
s = sb2.toString();
JSONArray detail = new JSONArray(s);
for(int j = 0; j < detail.length(); j++){
JSONObject obj2 = detail.getJSONObject(j);
boolean favorite = obj2.getBoolean("favorite");
String email = obj2.getString("email");
String largeURL = obj2.getString("largeImageURL");
JSONObject address = obj2.getJSONObject("address");
String street = address.getString("street");
String city = address.getString("city");
String state = address.getString("state");
c.setFavorite(favorite);
c.setLargeURL(largeURL);
c.setEmail(email);
c.setStreet(street);
c.setCityState(city + ", " + state);
}
in.close();
} catch (Exception e) {
Log.e("Error", e.getMessage());
}
return null;
}
}
的detailDownloader被稱爲: new detailDownloader(c.getDetailsURL(), c).execute();
但我得到我的日誌響應:"03-06 16:30:24.724: I/Choreographer(29237): Skipped 370 frames! The application may be doing too much work on its main thread."
任何想法如何解決這個問題?