【问题标题】:JSONArray java.lang.String cannot be converted to JSONObjectJSONArray java.lang.String 无法转换为 JSONObject
【发布时间】:2020-04-26 14:51:01
【问题描述】:

我正在使用 JSONObject 来解析 JSON 文件并获取其内容。一切正常,但标签未显示在 RecyclerView 中。

代码如下:

private void direct_url(){
    v_title = findViewById(R.id.vid_title);
    String url = kw_url_holder.getText().toString();
    String server_tag_url = "https://server.com/json.json";
    StringRequest request = new StringRequest(Request.Method.GET, server_tag_url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                String title,views,likes,dislikes,publishedon,duration;
                JSONObject object=new JSONObject(response);
                title = object.getString("title");
                v_title.setText(title);
                JSONArray tagsJsonArray = object.getJSONArray("tags");
                for(int i=0; i<tagsJsonArray.length();i++){
                    try {
                        JSONObject tagObj = new JSONObject();
                        tagObj = tagsJsonArray.getJSONObject(i);
                        TagUrlResultsModel tagUrlResultsModel = new TagUrlResultsModel();
                        tagUrlResultsModel.setV_tags(tagObj.getString(String.valueOf(i)));
                        url_result.add(tagUrlResultsModel);
                    }catch (JSONException e){
                        e.printStackTrace();
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("error",error.toString());
        }
    });
    url_queue = Volley.newRequestQueue(tags.this);
    url_queue.add(request);
}

JSON:

{
    "title": "The Title",
    "tags": ["tag1", "tag2"]
}

日志中有错误:

错误:java.lang.String 无法转换为 JSONObject

【问题讨论】:

  • JSONObject object=new JSONObject(String.valueOf(response));
  • 首先告诉我们response返回的是什么
  • 我不知道您所说的“响应”是什么意思?我从服务器获取给定的 JSON 文件并尝试将标签解析到 RecyclerView
  • 我已经粘贴了我正在使用的整个函数。 [问题更新]

标签: java android


【解决方案1】:

问题出在你的 for 循环中:

JSONObject tagObj = new JSONObject();
tagObj = tagsJsonArray.getJSONObject(i);
TagUrlResultsModel tagUrlResultsModel = new TagUrlResultsModel();
tagUrlResultsModel.setV_tags(tagObj.getString(String.valueOf(i)));
url_result.add(tagUrlResultsModel);

应该是

String tag;
tag = tagsJsonArray.getString(i);
TagUrlResultsModel tagUrlResultsModel = new TagUrlResultsModel();
tagUrlResultsModel.setV_tags(tag);
url_result.add(tagUrlResultsModel);

使用 getString() 而不是 getJSONObject() 因为 JSONArray 的内容只是字符串。

这就是你陷入困境的原因:

错误:java.lang.String 无法转换为 JSONObject

【讨论】:

  • 我已经这样做了,但是标签没有显示在 RecyclerView 中。字符串标签;标签 = tagsJsonArray.getString(i); TagUrlResultsModel tagUrlResultsModel = new TagUrlResultsModel(); tagUrlResultsModel.setV_tags(String.valueOf(i)); url_result.add(tagUrlResultsModel);
  • 它应该是setV_tags(tag),因为标签包含字符串本身,请检查更新的答案
  • 仍然没有显示,这很不寻常,因为它说没有连接适配器;跳过布局。但是,我已经设置了适配器
  • 那么你很可能在RecyclerView适配器上还有一个bug,这个问题不存在
  • 我检查了日志,所有的标签都是由代码获取的。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多