我从这个JSON填充一个微调器:
[
{
"vhc_name": "",
"vhc_login": "",
"vhc_password": ""
},
{
"vhc_name": "Tél de Pan-K",
"vhc_login": "178143p",
"vhc_password": "kaspersky"
},
{
"vhc_name": "toto",
"vhc_login": "215058k",
"vhc_password": "azertyu"
},
{
"vhc_name": "azertyuiop",
"vhc_login": "221589a",
"vhc_password": "azertyu"
}
]
它运行正常,但是当我在我的微调器上使用setOnItemSelectedListener
时,它只检索最后一个JSONObject的数据:
{
"vhc_name": "azertyuiop",
"vhc_login": "221589a",
"vhc_password": "azertyu"
}
知道它来自哪里?
这是我的代码:
private static final String TAG_LOGIN = "vhc_login";
private static final String TAG_PWD = "vhc_password";
String readFeed = readFeed();
// Display the list of the user's devices
ArrayList<Devices> devices = new ArrayList<Devices>();
// use this array to populate myDevicesSpinner
ArrayList<String> devicesNames = new ArrayList<String>();
try {
JSONArray jsonArray = new JSONArray(readFeed); // Method which parse the JSON Data
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Devices device = new Devices();
device.setName(jsonObject.optString(TAG_NAME));
devices.add(device);
devicesNames.add(jsonObject.optString(TAG_NAME));
}
} catch (Exception e) {
}
mySpinner = (Spinner)findViewById(R.id.myDevicesSpinner);
mySpinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, devicesNames));
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Devices tmp_device = devices.get(i);
pwd = tmp_device.getPassword();
Log.d("testoui",pwd);
}
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
日志“ouioui”显示:
11:41:08.539 9081 com.JeLocalisetrackerApp.view DEBUG ouioui kaspersky
11:41:08.539 9081 com.JeLocalisetrackerApp.view DEBUG ouioui azertyu
11:41:08.539 9081 com.JeLocalisetrackerApp.view DEBUG ouioui azertyu
日志“ouiouii”显示:
11:41:08.539 9081 com.JeLocalisetrackerApp.view VERBOSE ouiouii 178143p
11:41:08.539 9081 com.JeLocalisetrackerApp.view VERBOSE ouiouii 215058k
11:41:08.539 9081 com.JeLocalisetrackerApp.view VERBOSE ouiouii 221589a
日志“ouiouioui”显示:
11:41:08.585 9081 com.JeLocalisetrackerApp.view VERBOSE ouiouioui azertyu
日志“ouiouiouii”显示:
11:41:08.585 9081 com.JeLocalisetrackerApp.view VERBOSE ouiouiouii 221589a
每次我在微调器中选择不同的设备时,日志会显示最后一条消息“ouiouioui”和“ouiouiouii”为什么?如何检索onItemSelected中每个JSONObject的值?
我的班级设备是这样的:
public class Devices {
String name;
String logindevice;
String passworddevice;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLogin() {
return logindevice;
}
public void setLogin(String logindevice) {
this.logindevice = logindevice;
}
public String getPassword() {
return passworddevice;
}
public void setPassword(String passworddevice) {
this.passworddevice = passworddevice;
}
}
答案 0 :(得分:1)
您需要按setTag()
设置项目标记。
然后它会工作
答案 1 :(得分:0)
您可以尝试将onItemSelectedListener更改为我已实现的内容:
category_spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
String item_selected = arg0.getItemAtPosition(arg2)+"";//---------------This ***+""*** works as a toString() method
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
另外,我不明白为什么你要设置选择,当你的动作肯定会触发这个onItemSelected方法。这就是您实施OnItemSelectedListener
的原因。你不必在onItemSelected中设置选择。
public abstract void onItemSelected (AdapterView<?> parent, View view, int position, long id)
其中,
parent = The AdapterView where the selection happened
view = The view within the AdapterView that was clicked
position = The position of the view in the adapter
id = The row id of the item that is selected
抱歉,我没有看到您的评论部分。您需要从微调器中选择的devicename的用户名和密码,因此只需在OnItemSelected()中执行此操作Devices tmp_device = devices.get(int position);
,并使用您选择的此Devices
对象执行任何操作。