2017-09-18 1 views
0

J'utilise la méthode ci-dessous pour extraire et convertir du XML en JSON.Comment éviter l'affichage de la boîte de dialogue Application ne répondant pas

  1. D'abord, je passe une l'URL de l'appel api du xml, puis extraire les données et le mettre dans la chaîne.
  2. Ensuite, en utilisant ce Library, je convertir le fichier XML en JSON objet.
  3. Enfin, j'utilise les données d'objet json pour obtenir des données Web et remplir mes recyclerviews.

Il fonctionne bien, mais parfois, il me donne de dialogue ANR ..! de l'aide?

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

Utilisez une tâche asynchrone pour télécharger des données à partir de l'API ou utilisez une bibliothèque tierce comme volly et Retrofit. –

+0

https://developer.android.com/training/articles/perf-anr.html#anr – Kuffs

+0

Essayez d'utiliser Volley ou pour RetroFit réponse JSON, et de gérer l'ANR s'il vous plaît passer par ce -https: //developer.android.com /training/articles/perf-anr.html –

Répondre

1

Cette boîte de dialogue apparaît lorsque le thread principal de l'application est bloqué pendant trop longtemps. Essayez donc d'utiliser ASYNCTASK pour éviter cet arrêt.

+0

pouvez-vous me montrer comment, je ne l'ai pas utilisé avant !? –

+0

@SamZar S'il vous plaît regardez dans le lien https://xelsoft.wordpress.com/2014/11/28/asynctask-implementation-using-callback-interface/ –