【问题标题】:Unable to get String from JsonArray无法从 JsonArray 获取字符串
【发布时间】:2016-06-30 17:30:55
【问题描述】:

我在数组中得到 2,3&4 个字符串(值),但我无法在 textview 中设置值。我在 textview 中只得到 4 个同样重复的值。请在下面告诉我如何处理 this.JSON:

    {
    results: [
    {
    types: [
    "sublocality_level_3",
    "sublocality",
    "political"
    ]
    },
    {
    types: [
    "point_of_interest",
    "establishment"
    ]
    },
    {
    types: [
    "travel_agency",
    "point_of_interest",
    "establishment"
    ]
    },
    {
    types: [
    "point_of_interest",
    "establishment"
    ]
    },
    {
    types: [
    "store",
    "point_of_interest",
    "establishment"
    ]
    },
    {
    types: [
    "dentist",
    "health",
    "point_of_interest",
    "establishment"
    ]
    },
    {
    types: [
    "clothing_store",
    "store",
    "point_of_interest",
    "establishment"
    ]
    },
    {
    types: [
    "point_of_interest",
    "establishment"
    ]
    },
    ]
    }

编写我正在尝试的代码:

    try {
        object = new JSONObject(url);
        JSONArray array = object.getJSONArray("results");
        for (int i = 0; i < array.length(); i++){
            JSONObject object1 = array.getJSONObject(i);
            JSONArray array1 = object1.getJSONArray("types");
            for(int j = 0; j < array1.length(); j++){
                if (array1.length()==2) {
                    t1 = array1.getString(0);
                    t2 = array1.getString(1);
                }  if (array1.length()==3) {
                    t1 = array1.getString(0);
                    t2 = array1.getString(1);
                    t3 = array1.getString(2);
                }  if (array1.length()==4) {
                    t1 = array1.getString(0);
                    t2 = array1.getString(1);
                    t3 = array1.getString(2);
                    t4 = array1.getString(3);
                }
            }

            getterSetter.setT1(t1);
            getterSetter.setT2(t2);
            getterSetter.setT3(t3);
            getterSetter.setT4(t4);
            list.add(getterSetter);
            adapter = new GooglePlacesAdapter(GooglePlace.this,list);
            listView.setAdapter(adapter);
            }

    } catch (JSONException e) {
        e.printStackTrace();
    }

【问题讨论】:

  • 您面临的问题是什么?
  • 我无法获取数组列表类型为 2 和 3 的字符串
  • 重新编辑您的问题。您的 JSON 文件无效。 Please, read this link first

标签: android json arraylist


【解决方案1】:

你应该有类似这样的一行

GetterSetter getterSetter = new GetterSetter();

将此行移到第一个 for 循环中。

注意:绝对不需要内部 for 循环(第 2 个)。您可以删除该循环,并在其中保留 if 语句。

更新:你的代码应该是这样的

try {
    object = new JSONObject(url);
    JSONArray array = object.getJSONArray("results");
    for (int i = 0; i < array.length(); i++){
        JSONObject object1 = array.getJSONObject(i);
        JSONArray array1 = object1.getJSONArray("types");
        GetterSetter getterSetter = new GetterSetter(); // This line should be inside for loop
        if (array1.length()==2) {
            getterSetter.setT1(array1.getString(0));
            getterSetter.setT2(array1.getString(1));
        } else if (array1.length()==3) {
            getterSetter.setT1(array1.getString(0));
            getterSetter.setT2(array1.getString(1));
            getterSetter.setT3(array1.getString(2));
        } else if (array1.length()==4) {
            getterSetter.setT1(array1.getString(0));
            getterSetter.setT2(array1.getString(1));
            getterSetter.setT3(array1.getString(2));
            getterSetter.setT4(array1.getString(3));
        }

        list.add(getterSetter);
        adapter = new GooglePlacesAdapter(GooglePlace.this,list);
        listView.setAdapter(adapter);
    }

} catch (JSONException e) {
    e.printStackTrace();
}

【讨论】:

  • 有 2 个字符串的数组没有响应意味着我没有得到值
  • 罗希特!!在这方面,很少有领域。当我得到 50-60 个字段时如何处理。
  • 你的GetterSetter 类应该使用ArrayList 而不是单独的字符串。这样您就可以简单地继续向该数组列表添加字符串,最后在循环中根据需要执行操作。
【解决方案2】:

第一个数组应该是格式而不是语法

{
 "results": [
 {
   "types": [
  "sublocality_level_3",
"sublocality",
"political"
]
},
{
"types": [
"point_of_interest",
"establishment"
]
},
{
"types": [
"travel_agency",
"point_of_interest",
"establishment"
]
},
{
"types": [
"point_of_interest",
"establishment"
]
},
{
"types": [
"store",
"point_of_interest",
"establishment"
]
},
{
"types": [
"dentist",
"health",
"point_of_interest",
"establishment"
]
},
{
"types": [
"clothing_store",
"store",
"point_of_interest",
"establishment"
]
},
{
"types": [
"point_of_interest",
"establishment"
]
}
]
}

在代码中你这样做

try {
    object = new JSONObject(url);
    JSONArray array = object.getJSONArray("results");
    for (int i = 0; i < array.length(); i++){
        JSONObject object1 = array.getJSONObject(i);
        JSONArray array1 = object1.getJSONArray("types");
        for(int j = 0; j < array1.length(); j++){
            if (array1.length()==2) {
                t1 = array1.getString(0);
                t2 = array1.getString(1);
                t3 = "";
                t4 = "";
            }  else if (array1.length()==3) {
                t1 = array1.getString(0);
                t2 = array1.getString(1);
                t3 = array1.getString(2);
                t3 = "";
                t4 = "";
            }  else  if (array1.length()==4) {
                t1 = array1.getString(0);
                t2 = array1.getString(1);
                t3 = array1.getString(2);
                t4 = array1.getString(3);

            }
           getterSetter.setT1(t1);
           getterSetter.setT2(t2);
           getterSetter.setT3(t3);
           getterSetter.setT4(t4);
           list.add(getterSetter);
        }

        adapter = new GooglePlacesAdapter(GooglePlace.this,list);
        listView.setAdapter(adapter);
        }

} catch (JSONException e) {
    e.printStackTrace();
}

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2021-12-20
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多