【问题标题】:Special Characters when parsing Guardian API解析 Guardian API 时的特殊字符
【发布时间】:2019-09-11 04:22:26
【问题描述】:

我正在创建一个新闻应用程序,它使用 Guardian API 显示新闻列表,并且我正在使用 Volley 进行网络连接。但问题是当我从 JSON 对象中获取字符串并将它们直接存储在模型类中时,当我打开应用程序时,其中一些带有特殊字符。我想摆脱它们(见图)

我正在从 onCreate() 调用 prepareData() 方法

Guardian API link

private void prepareData() {
    //Create request queue
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    //Create new String request
    StringRequest stringRequest = new StringRequest(Request.Method.GET,
            GUARDIAN_URL,
            response -> {
                Log.i(LOG_TAG,"TEST: Response Received");
                progressBar.setVisibility(View.GONE);
                try {

                    JSONObject jsonObject = new JSONObject(response);
                    JSONObject response_obj = jsonObject.getJSONObject("response");
                    JSONArray resultArray = response_obj.getJSONArray("results");

                    for (int i = 0; i < resultArray.length(); i++) {
                        JSONObject jo = resultArray.getJSONObject(i);
                        String news_title = jo.getString("webTitle");
                        String author_name = "No author";
                        String section_name = jo.getString("sectionName");
                        String published_date = jo.getString("webPublicationDate");
                        String web_url = jo.getString("webUrl");
                        Log.i("TEST","news-title: "+ news_title + " section: "+section_name+ " date: "+published_date);

                        News news_item = new News(news_title, author_name, section_name, published_date, web_url);
                        news_list.add(news_item);
                    }
                    if (news_list.isEmpty()){
                        //set empty text visible and recycler view GONE if no news found
                        empty_text.setVisibility(View.VISIBLE);
                        recyclerView.setVisibility(View.GONE);
                    }
                    else {
                        //if news available set empty text to GONE
                        empty_text.setVisibility(View.GONE);
                        recyclerView.setVisibility(View.VISIBLE);
                        //RecyclerView adapter
                        mNewsAdapter= new NewsAdapter(news_list,this);
                        //setting adapter with recyclerView
                        recyclerView.setAdapter(mNewsAdapter);
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            },
            //Method that handles error in volley
            error -> Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_SHORT).show());
    //add string request to request queue
    requestQueue.add(stringRequest);
}

【问题讨论】:

    标签: android json android-volley


    【解决方案1】:

    我不确定您的 url 连接设置。应该是

    conn.setRequestProperty("Content-type", "application/json;charset=UTF-8");
    

    或者类似的东西

    URLEncoder.encode("Your Special Character", "UTF8");
    

    【讨论】:

    • 如何设置与 Volley 请求的连接
    • 我添加了另一个答案。请看一看。抱歉迟到了。
    【解决方案2】:

    请看这里。希望这个例子能帮助你理解如何在 volley request 中编码!

    public class Utf8JsonRequest extends JsonRequest<JSONObject> {
    ...
    @Override
    protected Response<JSONObject> parseNetworkResponse (NetworkResponse response) {
        try {
            String utf8String = new String(response.data, "UTF-8");
            return Response.success(new JSONObject(utf8String), HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            // log error
            return Response.error(new ParseError(e));
        } catch (JSONException e) {
            // log error
            return Response.error(new ParseError(e));
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2014-11-05
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多