2014-03-06 89 views
0

我有一个对象,与一个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."

任何想法如何解决这个问题?

回答

0

这段代码乍一看对我来说很合适。你确定这是导致跳帧的类吗?你确定你没有在导致这个问题的主线程上做其他事吗?

贵detailsDownloader类实现onPreExecute或onPostExecute?如果是这样,你也应该发布你的代码。

0

这种类型的错误通常是通过使用过多UI threads,检查this更多信息所致。