选择项目时如何在微调器中获取关联的其他 json 值
how to get associated other json value in spinner when an item selected
我正在尝试一个简单的应用程序,我在其中使用从网络调用中获得的值(json 值)填充微调器。但是当从微调器中选择一个项目时,我不知道如何获取关联的 json 值。任何人都可以向我提供有关如何执行此操作的 article/reference 吗?
这是我的json回复
{
item: {
name: "xyz",
brands: [
{
id: 123,
name: "abc"
}
]
}
}
这就是我解析 json 的方式。
public class user_activity extends ActionBarActivity {
RequestQueue queue;
ArrayList<String> brand_list = new ArrayList<String>();
Spinner spinner;
String brand_id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_activity);
this.spinner= (Spinner) findViewById(R.id.spinner);
loadUser();
}
public void loadUser() {
final ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Please Wait..");
pDialog.show();
queue = Volley.newRequestQueue(this);
String url = "http://myApiUrl";
JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.GET, url,
new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
pDialog.hide();
try {
JSONArray array = response.getJSONObject("item").getJSONArray("brands");
for (int i=0; i< array.length();i++) {
String b = array.getJSONObject(i).getString("name");
brand_list.add(b);
}
ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(user_activity.this,android.R.layout.simple_dropdown_item_1line,brand_list);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(getBaseContext(),spinner.getSelectedItem().toString(),Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
} catch (JSONException e) {
e.printStackTrace();
pDialog.hide();
}
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", String.valueOf(error));
}
}
);
queue.add(postRequest);
}
我想通过按钮意图将关联的 ID 值即“123”发送到下一个 activity。
编辑:
修改代码如下
但是函数设置微调器总是returnsempty
public class user_activity extends ActionBarActivity {
String phone_number;
String access_token;
Button enterButton;
String brand_id;
TextView uName;
RequestQueue queue;
ArrayList<String> brand_list = new ArrayList<String>();
ArrayList<String> _ids = new ArrayList<String>();
Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_activity);
this.phone_number = getIntent().getStringExtra("phone");
this.access_token = getIntent().getStringExtra("token");
enterButton = (Button)findViewById(R.id.buttonEnter);
uName = (TextView) findViewById(R.id.tvName);
this.spinner= (Spinner) findViewById(R.id.spinner);
loadUser(phone_number, access_token);
// nextActivity(b[0]);
}
public void loadUser(String phone, String token) {
final ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Please Wait..");
pDialog.show();
queue = Volley.newRequestQueue(this);
final String[] message = new String[1];
final String[] my_id = new String[1];
String url = "http://api_url";
JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.GET, url,
new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
pDialog.hide();
try {
message[0] = response.getJSONObject("item").getString("name");
uName.setText(message[0]);
JSONArray array = response.getJSONObject("item").getJSONArray("brands");
for (int i=0; i< array.length();i++) {
String b = array.getJSONObject(i).getString("name");
String id = array.getJSONObject(i).getString("id");
_ids.add(id);
brand_list.add(b);
}
String id = setSpinner();
} catch (JSONException e) {
e.printStackTrace();
pDialog.hide();
}
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", String.valueOf(error));
}
}
);
queue.add(postRequest);
}
public String setSpinner(){
ArrayAdapter<String> adapter;
final String[] id = new String[1];
adapter = new ArrayAdapter<String>(user_activity.this,android.R.layout.simple_dropdown_item_1line,brand_list);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
id[0] = _ids.get(i);
// Toast.makeText(getBaseContext(), id[0] + ":" + spinner.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
Toast.makeText(getBaseContext(), id[0].toString() , Toast.LENGTH_SHORT).show();
return id[0];
}
有很多方法。
一种方法是创建 id
arrayList
ArrayList<String> _ids = new ArrayList<String>();
将 JSON
中的值添加到此 arryList
String id = array.getJSONObject(i).getString("id");
_ids.add(id);
然后在你的 spinner.setOnItemSelectedListener(....)
中使用它
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
String id=_ids.get(position);//Used this id to pass to another Activity
}
....
});
创建一个 Class 如下所示的品牌
class Brand {
int id;
String name;
@Override
public String toString() {
return name;
}
}
现在更改您的解析代码并创建 Brand 对象而不是仅获取名称并将其添加到 brand_list
。一旦用户 select 任何你可以获得 selected 索引找到品牌对象并将 id 从对象发送到另一个 activity.
您需要创建自己的 OnItemSelectedListener
接口实现,并通过 spinner.setOnItemSelectedListener(listener)
将其放置到微调器中。您的 listener
对象应该看起来像
listener = new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
JSONObject selectedObject = globalItemsObject.optJSONObject(position);
//make some actions with "selectedObject"
}
public void onNothingSelected(AdapterView<?> parent) {
}
};
我认为您需要先将数据存储在如下所示的数组列表中..
JSONArray array = response.getJSONObject("item").getJSONArray("brands");
for (int i=0; i< array.length();i++) {
JSONObject mItemObject = array.getJSONObject(i);
String b = mItemObject.getString("name");
brand_list.add(b);
JSONArray mBrandsArray = mItemObject.getJSONArray("brands");
JSONObject mBrandsObject = mBrandsArray.getJSONObject(0);
String brandsId = mBrandsObject.getString("id");
String brandsName = mBrandsObject.getString("name");
brand_id.add(brandId); //make this array list likebrand_list
brand_name.add(brandName); //make this array list like ..
}
然后在你的微调器中
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(getBaseContext(),spinner.getSelectedItem().toString(),Toast.LENGTH_LONG).show();
Intent mIntent = new Intent(this, NewActivity.class);
// load data using putExtra
mIntent.putExtra("id", brand_id.get(i));
...
...
startActivity(mIntent);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
我正在尝试一个简单的应用程序,我在其中使用从网络调用中获得的值(json 值)填充微调器。但是当从微调器中选择一个项目时,我不知道如何获取关联的 json 值。任何人都可以向我提供有关如何执行此操作的 article/reference 吗?
这是我的json回复
{
item: {
name: "xyz",
brands: [
{
id: 123,
name: "abc"
}
]
}
}
这就是我解析 json 的方式。
public class user_activity extends ActionBarActivity {
RequestQueue queue;
ArrayList<String> brand_list = new ArrayList<String>();
Spinner spinner;
String brand_id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_activity);
this.spinner= (Spinner) findViewById(R.id.spinner);
loadUser();
}
public void loadUser() {
final ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Please Wait..");
pDialog.show();
queue = Volley.newRequestQueue(this);
String url = "http://myApiUrl";
JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.GET, url,
new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
pDialog.hide();
try {
JSONArray array = response.getJSONObject("item").getJSONArray("brands");
for (int i=0; i< array.length();i++) {
String b = array.getJSONObject(i).getString("name");
brand_list.add(b);
}
ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(user_activity.this,android.R.layout.simple_dropdown_item_1line,brand_list);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(getBaseContext(),spinner.getSelectedItem().toString(),Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
} catch (JSONException e) {
e.printStackTrace();
pDialog.hide();
}
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", String.valueOf(error));
}
}
);
queue.add(postRequest);
}
我想通过按钮意图将关联的 ID 值即“123”发送到下一个 activity。
编辑: 修改代码如下
但是函数设置微调器总是returnsempty
public class user_activity extends ActionBarActivity {
String phone_number;
String access_token;
Button enterButton;
String brand_id;
TextView uName;
RequestQueue queue;
ArrayList<String> brand_list = new ArrayList<String>();
ArrayList<String> _ids = new ArrayList<String>();
Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_activity);
this.phone_number = getIntent().getStringExtra("phone");
this.access_token = getIntent().getStringExtra("token");
enterButton = (Button)findViewById(R.id.buttonEnter);
uName = (TextView) findViewById(R.id.tvName);
this.spinner= (Spinner) findViewById(R.id.spinner);
loadUser(phone_number, access_token);
// nextActivity(b[0]);
}
public void loadUser(String phone, String token) {
final ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Please Wait..");
pDialog.show();
queue = Volley.newRequestQueue(this);
final String[] message = new String[1];
final String[] my_id = new String[1];
String url = "http://api_url";
JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.GET, url,
new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
pDialog.hide();
try {
message[0] = response.getJSONObject("item").getString("name");
uName.setText(message[0]);
JSONArray array = response.getJSONObject("item").getJSONArray("brands");
for (int i=0; i< array.length();i++) {
String b = array.getJSONObject(i).getString("name");
String id = array.getJSONObject(i).getString("id");
_ids.add(id);
brand_list.add(b);
}
String id = setSpinner();
} catch (JSONException e) {
e.printStackTrace();
pDialog.hide();
}
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", String.valueOf(error));
}
}
);
queue.add(postRequest);
}
public String setSpinner(){
ArrayAdapter<String> adapter;
final String[] id = new String[1];
adapter = new ArrayAdapter<String>(user_activity.this,android.R.layout.simple_dropdown_item_1line,brand_list);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
id[0] = _ids.get(i);
// Toast.makeText(getBaseContext(), id[0] + ":" + spinner.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
Toast.makeText(getBaseContext(), id[0].toString() , Toast.LENGTH_SHORT).show();
return id[0];
}
有很多方法。
一种方法是创建 id
arrayList
ArrayList<String> _ids = new ArrayList<String>();
将 JSON
中的值添加到此 arryList
String id = array.getJSONObject(i).getString("id");
_ids.add(id);
然后在你的 spinner.setOnItemSelectedListener(....)
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
String id=_ids.get(position);//Used this id to pass to another Activity
}
....
});
创建一个 Class 如下所示的品牌
class Brand {
int id;
String name;
@Override
public String toString() {
return name;
}
}
现在更改您的解析代码并创建 Brand 对象而不是仅获取名称并将其添加到 brand_list
。一旦用户 select 任何你可以获得 selected 索引找到品牌对象并将 id 从对象发送到另一个 activity.
您需要创建自己的 OnItemSelectedListener
接口实现,并通过 spinner.setOnItemSelectedListener(listener)
将其放置到微调器中。您的 listener
对象应该看起来像
listener = new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
JSONObject selectedObject = globalItemsObject.optJSONObject(position);
//make some actions with "selectedObject"
}
public void onNothingSelected(AdapterView<?> parent) {
}
};
我认为您需要先将数据存储在如下所示的数组列表中..
JSONArray array = response.getJSONObject("item").getJSONArray("brands");
for (int i=0; i< array.length();i++) {
JSONObject mItemObject = array.getJSONObject(i);
String b = mItemObject.getString("name");
brand_list.add(b);
JSONArray mBrandsArray = mItemObject.getJSONArray("brands");
JSONObject mBrandsObject = mBrandsArray.getJSONObject(0);
String brandsId = mBrandsObject.getString("id");
String brandsName = mBrandsObject.getString("name");
brand_id.add(brandId); //make this array list likebrand_list
brand_name.add(brandName); //make this array list like ..
}
然后在你的微调器中
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(getBaseContext(),spinner.getSelectedItem().toString(),Toast.LENGTH_LONG).show();
Intent mIntent = new Intent(this, NewActivity.class);
// load data using putExtra
mIntent.putExtra("id", brand_id.get(i));
...
...
startActivity(mIntent);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});