Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-如何正确设置AsyncTask以从URL获取JSON数据?_Android_Android Asynctask - Fatal编程技术网

Android-如何正确设置AsyncTask以从URL获取JSON数据?

Android-如何正确设置AsyncTask以从URL获取JSON数据?,android,android-asynctask,Android,Android Asynctask,我有一个对象,contact,带有detailsURL字符串。在这个URL上有一些JSON,其中包含关于我需要设置的联系人的更多信息。我尝试执行此任务的方式如下: class detailDownloader extends AsyncTask<String, Void, Void> { String detail; private contact c; public detailDownloader(String detail, con

我有一个对象,contact,带有detailsURL字符串。在这个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;
      }
}
class detailDownloader扩展了异步任务{
字符串细节;
私人联络c;
公共详细信息下载程序(字符串详细信息,联系c){
这个.c=c;
this.detail=细节;
}
受保护的Void doInBackground(字符串…URL){
字符串url=url[0];
日志d(“联系人”、“1”);
字符串s;
试一试{
InputStream in=new java.net.URL(URL.openStream();
日志d(“联系人”,“2”);
BufferedReader br2=null;
br2=新的BufferedReader(新的InputStreamReader(在“UTF-8”中));
StringBuilder sb2=新的StringBuilder();
日志d(“联系人”,“3”);
而((s=br2.readLine())!=null){
sb2.附加(s);
}
s=sb2.toString();
JSONArray detail=新JSONArray;
对于(int j=0;j
detailDownloader由以下人员调用:
newdetaildownloader(c.getDetailsURL(),c.execute()

但是我在日志中得到了一个响应:
“03-06 16:30:24.724:I/Choreographer(29237):跳过了370帧!应用程序可能在其主线程上做了太多工作。”


你知道如何解决这个问题吗?

乍一看,这段代码还不错。你确定是这个类导致了跳过的帧吗?您确定没有在主线程上执行导致此问题的其他操作吗


您的detailsDownloader类实现了onPreExecute还是onPostExecute?如果是这样,您也应该发布这些方法的代码。

此类错误通常是由于使用了太多的
UI线程造成的,请查看更多信息