如何避免显示“应用程序无响应”对话框

时间:2017-09-18 06:35:15

标签: java android multithreading web-services handler

我正在使用以下方法提取将XML转换为JSON。

  1. 首先,我传递了xml api调用的url然后解压缩 数据并将其放入String。
  2. 然后使用这个Library,我 将xml转换为JSON对象。
  3. 最后我使用了json对象数据 获取网络数据并填充我的Recyclerviews。
  4. 效果很好,但有时会给我ANR对话..有什么帮助吗?

      public static void getResponse(final String xmlLink, final Activity activity,
          final GetJSONRespone getjson) {
    
        Handler uiHandler = new Handler(Looper.getMainLooper());
        uiHandler.post(new Runnable() {
          @Override
          public void run() {
            URL url = null;
            BufferedReader in = null;
            try {
              url = new URL(xmlLink);
    
              in = new BufferedReader(
                  new InputStreamReader(
                      url.openStream(), "UTF-8")); 
    
              String inputLine;
              System.setProperty("http.keepAlive", "false");  
    
              StringBuilder builder = new StringBuilder();
              while ((inputLine = in.readLine()) != null) {
                builder.append(inputLine);
              }
              String urlContent = builder.toString();
    
              XmlToJson xmlToJson = new XmlToJson.Builder(urlContent).build();
    
              JSONObject response = xmlToJson.toJson();
              Log.i("response: ", response.toString());
    
              getjson.getJSON(response);
    
    
            } catch (IOException e) {
              e.printStackTrace();
            } finally {
              if (in != null) {
                try {
                  in.close();
                } catch (IOException e) {
                  e.printStackTrace();
                }
              }
            }
          }
        });
      }
    

1 个答案:

答案 0 :(得分:1)

当应用程序的主线程被阻塞太长时,会出现此对话框。因此,请尝试使用ASYNCTASK来避免此停止。