0

J'ai un code qui fonctionne apparemment bien jusqu'à Android 6.0, pour gérer les caractères spéciaux comme les caractères suédois. Mais cela ne fonctionne pas bien dans la version Android 7.0 N, aucune solution, aussi HTTP.CONTENT_TYPE est obsolète. Ceci est la ligne de code supplémentaire qui m'a aidé à le faire fonctionner jusqu'à Android 6,0 ​​Traitement des caractères spéciaux dans android volley Android-N version

response.headers.put(HTTP.CONTENT_TYPE, response.headers.get("content-type")); 

A partir de maintenant je reçois caractère est comme Å, å, Ä, Ö, ö, comme "& # 1234 "etc genre de valeur est en réponse. Toute modification ou codes antidepricated actifs, seraient utiles ,,

 @Override 
protected Response<T> parseNetworkResponse(NetworkResponse response) { 
    try { 
     Response<T> resp = null; 

     //handling special character's and content type based on request type 
     //http may be deprecated, but we are handling it over org.apache library in gradle 
     response.headers.put(HTTP.CONTENT_TYPE, response.headers.get("content-type")); 
     String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 

     Gson gson = new GsonBuilder().create(); 
     switch (mJsonResponseType) { 

      case JSON_OBJECT: 
       resp = Response.success(gson.fromJson(json, mResponseClass), HttpHeaderParser.parseCacheHeaders(response)); 
       break; 

      case JSON_ARRAY: 
       // NOTE: For this to work properly the mResponseClass must be set to an array type, e.g. MyClass[] 
       resp = (Response<T>) Response.success(gson.fromJson(json, mResponseClass), HttpHeaderParser.parseCacheHeaders(response)); 
       break; 

      default: 
       resp = (Response<T>) Response.success(json, HttpHeaderParser.parseCacheHeaders(response)); 
       break; 
     } 
     return resp; 

    } catch (UnsupportedEncodingException e) { 
     return Response.error(new ParseError(e)); 

    } catch (JsonSyntaxException e) { 
     return Response.error(new ParseError(e)); 
    } 
} 
+0

Qu'est-ce que response.headers.get (« -type de contenu ») retour? Et quel est le codage de caractères attendu? Celui du site. – Juan

+0

"Content-Type" -> "application/json; charset = utf-8", eh bien, il nécessite le même format qui vient ,, bizarre –

+0

essayez de remplacer String json = new String (response.data, HttpHeaderParser.parseCharset (response.headers)); avec String json = new String (response.data, "UTF-8")); – Juan

Répondre

0

Apparemment Volley a ainsi intégré de manipulation de la classe de demande, où je l'ai trouvé quelque chose comme, static private String DEFAULT_PARAMS_ENCODING = "UTF-8"; Ainsi, le Changeons je l'ai fait à specefic section avec une méthode, où les données marquées html a été à venir en réponse :)

public static Spanned fromHtml(String html) { 
      if (NullCheckUtils.isEmpty(html)) { 
       html = ""; 
      } 
      html = (html.replace("&lt;", "<").replace("&gt;", ">")); 
      Spanned result; 
      if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { 
       result = Html.fromHtml(html.trim(), Html.FROM_HTML_MODE_LEGACY); 
      } else { 
       result = Html.fromHtml(html.trim()); 
      } 
      return result; 
     } 

String response=fromHtml("&#1234").toString(); 
Log.d(TAG,response);