2015-07-02 4 views
-1

Я делаю запрос Json, и я получаю данные и размещаю их в виде списка, но некоторые строки, которые у меня есть, имеют акценты или «ç», и он не появляется правильно. Например, строка «Bragança», и я получаю «Bragança» или «à» и получаю «Ã». Если я выполняю запрос в браузере, все работает правильно. Моя просьба.Данные запроса json со странными символами в запросе на волейбол

public void makeJsonArrayRequest() { 

    RequestQueue queue = AppController.getInstance().getRequestQueue(); 
    queue.start(); 
    JsonArrayRequest Req = new JsonArrayRequest(urlJsonObjUtilizadas, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        Log.d(TAG, response.toString()); 
        // Parsing json 

        for (int i = 0; i < response.length(); i++) { 
         try { 
          JSONObject ementaObj = response.getJSONObject(i); 
          Ementa ementa = new Ementa(); 


          ementa.setCantina(ementaObj.getString("cantina")); 
          ementa.setDescricao(ementaObj.getString("descricao")); 
          ementa.setEmenta(ementaObj.getString("ementa")); 
          ementa.setPreco(ementaObj.getInt("preco")); 

          ementaItems.add(ementa); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
        // notifying list adapter about data changes 
        adapter.notifyDataSetChanged(); 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.d(TAG, "Error: " + error.getMessage()); 

     } 
    }) { 
     //** 
     // Passing some request headers 
     //* 
     @Override 
     public Map<String, String> getHeaders() { 
      HashMap<String, String> headers = new HashMap<String, String>(); 
      headers.put("Content-Type", "application/json; charset=UTF-8"); 
      return headers; 
     } 
    }; 
    // Add the request to the RequestQueue. 
    AppController.getInstance().addToRequestQueue(Req); 
} 
+0

Является ли это опечатка? ementa.setPreco (ementaObj.getInt ("PRECO")); Другими элементами являются строки. – Cookster

+0

есть. preco - целое число –

ответ

0

, пожалуйста, попробуйте использовать этот код для отправки и получения JSON с UTF-8 кодировкой:

try { 
    URL url = new URL("your url"); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

    conn.setDoOutput(true); 

    OutputStreamWriter writer = new OutputStreamWriter(
      conn.getOutputStream(), "UTF-8"); 
    String request = "your json"; 
    writer.write(request); 
    writer.flush(); 
    System.out.println("Code:" + conn.getResponseCode()); 
    System.out.println("mess:" + conn.getResponseMessage()); 

    String response = ""; 
    BufferedReader reader = new BufferedReader(new InputStreamReader(
      conn.getInputStream(), "UTF-8")); 
    String line; 
    while ((line = reader.readLine()) != null) { 
     response += line; 
    } 

    System.out.println(new String(response.getBytes(), "UTF8")); 
    writer.close(); 
    reader.close(); 
} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

Можете ли вы показать мне, как это сделать в моем коде? Спасибо. –

1

Я думаю, что это из-за заголовка кодирования неправильного типа содержимого. Вы должны использовать UTF-8 в качестве кодировки. Возможно, это работает в браузерах, потому что заголовки не чувствительны к регистру (в отличие от Android). Посмотрите here для решения. По сути, они вручную переопределяют кодировку.

0

Вы должны добавить кодировку заголовка запроса в UTF-8. Например, если ваш запрос будет как JSON, вы должны добавить этот заголовок в запросе:

«Content-Type»: «Aplicación/JSon; UTF-8»

Я тоже использовать Volley и этот способ работы для меня.

С уважением.

+0

Извините, я новичок в android, как добавить заголовок запроса в свой код? Спасибо. –

+0

shure, я дам вам настоящий пример, проверьте другой ответ. –

+0

Я уже поставил заголовки в запросе, но результат тот же. Я обновляю свой вопрос с помощью нового кода. –

0

Проверить этот образец, таким образом, я использую, смотрите раздел заголовка

public class Estratek_JSONString extends JsonRequest<String>{ 
Activity Act; 
Priority priority; 

public Estratek_JSONString(int m, String url, JSONObject params, 
     Listener<String> listener, ErrorListener errorListener,Activity act, Priority p) { 
    super(m,url,params.toString(),listener,errorListener); 

    this.Act=act; 
    this.priority=p;  
} 
public Estratek_JSONString(int m, String url, 
     Listener<String> listener, ErrorListener errorListener,Activity act, Priority p) { 
    // super constructor 

    //super(m,url,params.toString(),listener,errorListener); 
    super(m,url,null,listener,errorListener); 

    this.Act=act; 
    this.priority=p;  
} 

@Override 
public Map<String, String> getHeaders() { 
     HashMap<String, String> headers = new HashMap<String, String>(); 
     headers.put("Content-Type", "application/json; charset=utf-8"); 
     headers.put("Authorization", "Bearer "+Tools.Get_string(Act.getApplicationContext(),Global_vars.Access_token)); 
     return headers; 
    } 

//it make posible send parameters into the body. 
    @Override 
    public Priority getPriority(){ 
    return priority; 
} 

    @Override 
    protected Response<String> parseNetworkResponse(NetworkResponse response) { 
     try { 
      String jsonString = 
       new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 
      return Response.success(new String(jsonString), 
        HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (UnsupportedEncodingException e) { 
      return Response.error(new ParseError(e)); 
     } 
    } 

}

Смежные вопросы