如何将 Json 数组分配给微调列表?
How to assign Json Array into spinner list?
我有一个 JSON 示例列表,如下所示,我试图将其放入微调器中:-
[{"occupation_id":0,"occupation_name":"Teacher"},{"occupation_id":1,"occupation_name":"Business Owner"}]
当我尝试应用这些代码时:-
val jsonArray = JSONArray(jsonString)
var list = ArrayList<Occupation>()
var x = 0
while (x < jsonArray.length()) {
var jsonObject = jsonArray.getJSONObject(x)
list.add(Occupation(
jsonObject.getString("occupation_id"),
jsonObject.getString("occupation_name")
))
x++
}
var spinnerOccupation = findViewById<Spinner>(jasiez.helloworld.jasiez.R.id.spinnerOccupation)
// Initializing an ArrayAdapter
val occupationAdapter = ArrayAdapter(
this, // Context
android.R.layout.simple_spinner_item,
list// Array
)
occupationAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line)
spinnerOccupation.adapter = occupationAdapter
我在微调器中得到这个
当我试图改变时
val occupationAdapter = ArrayAdapter(
this, // Context
android.R.layout.simple_spinner_item,
list// Array
)
到
val occupationAdapter = ArrayAdapter(
this, // Context
android.R.layout.simple_spinner_item,
list.occupation_name.toList()
)
我收到错误 未解决的参考:occupation_name。如果我更改为 list[0].occupation_name.toList() 我将在每个下拉列表选项中显示第一个职业名称和 1 个字符。
如何在此处的每个选项中获得正确的职业名称?请help.Thank你
我在处理JSon的时候也遇到过同样的情况。我所做的是 override
toString
来自我的对象。在您的情况下,您可以从您的职业对象中覆盖 toString
到您的职业名称。
public class Occupation {
int occupation_id;
String occupation_name;
public Occupation() {
}
public int getOccupation_id() {
return occupation_id;
}
public void setOccupation_id(int occupation_id) {
this.occupation_id = occupation_id;
}
public String getOccupation_name() {
return occupation_name;
}
public void setOccupation_name(String occupation_name) {
this.occupation_name = occupation_name;
}
//converts your occupation_name to string
@NonNull
@Override
public String toString() {
return occupation_name;
//or you can also add title to your occupation name by doing this
//return "Occupation: "+ occupation_name;
}
}
看看这是否适合你。
当你使用ArrayAdapter时,你只能传递String(List)的列表,不能像List一样传递,所以列表如下:
var list = ArrayList<String>()
.......
list.add(jsonObject.getString("occupation_name"))
您可以编写一个自定义适配器来保存您的数据列表,并覆盖 getview 以在微调器的文本视图中设置值。查看 this link 以查看示例。
我有一个 JSON 示例列表,如下所示,我试图将其放入微调器中:-
[{"occupation_id":0,"occupation_name":"Teacher"},{"occupation_id":1,"occupation_name":"Business Owner"}]
当我尝试应用这些代码时:-
val jsonArray = JSONArray(jsonString)
var list = ArrayList<Occupation>()
var x = 0
while (x < jsonArray.length()) {
var jsonObject = jsonArray.getJSONObject(x)
list.add(Occupation(
jsonObject.getString("occupation_id"),
jsonObject.getString("occupation_name")
))
x++
}
var spinnerOccupation = findViewById<Spinner>(jasiez.helloworld.jasiez.R.id.spinnerOccupation)
// Initializing an ArrayAdapter
val occupationAdapter = ArrayAdapter(
this, // Context
android.R.layout.simple_spinner_item,
list// Array
)
occupationAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line)
spinnerOccupation.adapter = occupationAdapter
我在微调器中得到这个
当我试图改变时
val occupationAdapter = ArrayAdapter(
this, // Context
android.R.layout.simple_spinner_item,
list// Array
)
到
val occupationAdapter = ArrayAdapter(
this, // Context
android.R.layout.simple_spinner_item,
list.occupation_name.toList()
)
我收到错误 未解决的参考:occupation_name。如果我更改为 list[0].occupation_name.toList() 我将在每个下拉列表选项中显示第一个职业名称和 1 个字符。
如何在此处的每个选项中获得正确的职业名称?请help.Thank你
我在处理JSon的时候也遇到过同样的情况。我所做的是 override
toString
来自我的对象。在您的情况下,您可以从您的职业对象中覆盖 toString
到您的职业名称。
public class Occupation {
int occupation_id;
String occupation_name;
public Occupation() {
}
public int getOccupation_id() {
return occupation_id;
}
public void setOccupation_id(int occupation_id) {
this.occupation_id = occupation_id;
}
public String getOccupation_name() {
return occupation_name;
}
public void setOccupation_name(String occupation_name) {
this.occupation_name = occupation_name;
}
//converts your occupation_name to string
@NonNull
@Override
public String toString() {
return occupation_name;
//or you can also add title to your occupation name by doing this
//return "Occupation: "+ occupation_name;
}
}
看看这是否适合你。
当你使用ArrayAdapter时,你只能传递String(List)的列表,不能像List一样传递,所以列表如下:
var list = ArrayList<String>()
.......
list.add(jsonObject.getString("occupation_name"))
您可以编写一个自定义适配器来保存您的数据列表,并覆盖 getview 以在微调器的文本视图中设置值。查看 this link 以查看示例。