我正在尝试使用以下代码从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个。)
我已经尝试使用谷歌搜索所有选项以及我能想到的许多其他变体,并且找不到任何有用的结果,所以我显然错过了一些东西。
删除重复值的正确方法是什么?
答案 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)
现在你有了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)
如果您不关心区分大小写,请使用包含方法