从微调器

时间:2017-02-15 10:21:38

标签: android json spinner

我正在尝试使用以下代码从json数据加载微调器:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ArrayList<String> items = getCountries("data.json");

    Spinner spinner = (Spinner)findViewById(R.id.spinnerStandard);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.second_layout,R.id.txtStandard,items);
    spinner.setAdapter(adapter);
}

private ArrayList<String> getCountries(String fileName){
    JSONArray jsonArray = null;
    ArrayList<String> cList = new ArrayList<String>();
    try {
        InputStream is = getResources().getAssets().open(fileName);
        int size = is.available();
        byte[] data = new byte[size];
        is.read(data);
        is.close();
        String json = new String(data, "UTF-8");
        jsonArray=new JSONArray(json);
        if (jsonArray != null) {
            for (int i = 0; i < jsonArray.length(); i++) {
                cList.add(jsonArray.getJSONObject(i).getString("standard"));
            }
        }
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    catch (JSONException je)
    {
        je.printStackTrace();
    }
    return cList;
}

我的json数据是,

[
{
    "name":"Manoj",
    "surname":"Jadhav",
    "age":"18",
    "div":"A",
    "standard":"7"
},
{
    "name":"Nilesh",
    "surname":"Patankar",
    "age":"17",
    "div":"B",
    "standard":"7"
},
{
    "name":"Gourav",
    "surname":"Patil",
    "age":"18",
    "div":"A",
    "standard":"8"
},
{
    "name":"Pushkar",
    "surname":"Ganpule",
    "age":"17",
    "div":"A",
    "standard":"7"
},
{
    "name":"Prashant",
    "surname":"Raut",
    "age":"18",
    "div":"A",
    "standard":"8"
},
{
    "name":"Nachiket",
    "surname":"Salvi",
    "age":"17",
    "div":"A",
    "standard":"7"
},
{
    "name":"Hiren",
    "surname":"Lakhmani",
    "age":"18",
    "div":"B",
    "standard":"6"
}

在json数据中我有重复的标准值,因为我只想将json中的唯一值加载到微调器中(就像有标准值是7,7,8,7,8,7,6,我想只显示这些重复值中有6,7,8个。)

我已经尝试使用谷歌搜索所有选项以及我能想到的许多其他变体,并且找不到任何有用的结果,所以我显然错过了一些东西。

删除重复值的正确方法是什么?

6 个答案:

答案 0 :(得分:1)

在您的方法

中将此代码写在 return cList 上方
HashSet<String> hashSet = new HashSet<String>();
    hashSet.addAll(cList);
    cList.clear();
    cList.addAll(hashSet);

return cList;

for (int i = 0; i < jsonArray.length(); i++) {
if(!Clist.contains(jsonArray.getJSONObject(i).getString("standard"))){
    cList.add();
}
}

答案 1 :(得分:0)

From Array to HashSet

现在你有了Unique元素。再次将其转换为Array并在适配器中使用它。应该这样做。希望这会有所帮助。

答案 2 :(得分:0)

undefined

答案 3 :(得分:0)

for (int i = 0; i < jsonArray.length(); i++) {
    if(!cList.contains(jsonArray.getJSONObject(i).getString("standard"))){
        cList.add(jsonArray.getJSONObject(i).getString("standard"));
       }
   }

答案 4 :(得分:0)

将迭代器更新为

if (jsonArray != null) {
        for (int i = 0; i < jsonArray.length(); i++) {
            String standard = jsonArray.getJSONObject(i).getString("standard");
            if(!cList.contains(standard))
               cList.add(standard);
        }
    }

答案 5 :(得分:0)

如果您不关心区分大小写,请使用包含方法