从 onItemClickListener 中的 JSON 对象获取 id
Posted
技术标签:
【中文标题】从 onItemClickListener 中的 JSON 对象获取 id【英文标题】:Getting id from from JSON objects inside onItemClickListener 【发布时间】:2015-08-21 05:20:38 【问题描述】:首先,我将 volley 库用于我的帖子请求。在这种情况下,我从服务器检索以下 json 格式作为响应。
"status":"success","message":"Teams without a league have been
found.",
"teams":["ID":"31","team_name":"A Team",
"ID":"101","team_name":"The BEST team",
"ID":"109","team_name":"ael fc",
"ID":"110","team_name":"UK",
"ID":"111","team_name":"cyprus",
"ID":"112","team_name":"biochemisty"
]
我做了所有必要的 JSON 反序列化并在列表中显示团队数组的对象。
现在我要做的是将所选团队的 ID 值存储在一个字符串数组中。有什么想法吗?
这是部分代码
final JsonObjectRequest jsonObjReq1 = new
JsonObjectRequest(AppConfig.URL_GET_ALL_LEAGUE_TEAMS, jsonObject,
new com.android.volley.Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
Log.d("TAG", response.toString());
try
if(response.getString("status").equals("success"))
JSONArray teamsArray = response.getJSONArray("teams");
for(int i = 0; i< teamsArray.length(); i++)
teams = teamsArray.getJSONObject(i);
noLeagueMembersClass = new
NoLeagueMemberClass();
noLeagueMembersClass.
setTeamMember(teams.getString("team_name"));
noLeagueMembersClass.
setTeamMember(teams.getString("ID"));
noLeagueMemberList.add(noLeagueMembersClass);
listView.setAdapter(noLeagueAdapter);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setItemsCanFocus(false);
listView.setOnItemClickListener(new
AdapterView.OnItemClickListener()
@Override
public void onItemClick
(AdapterView<?> parent, View view, int position, long id)
Toast.makeText(getApplicationContext(),"You
clicked"+position,Toast.LENGTH_SHORT).show();
);
catch (JSONException e)
e.printStackTrace();
我尝试以下方法
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
try
final String teamId =
teams.getString("ID");
Log.d("teamId",teamId);
catch (JSONException e)
e.printStackTrace();
但我总是得到 teamId=120。例如,当我选择第一行时,我希望 teamId 等于 31。当我单击第二行时,我希望 teamId 等于 101,依此类推。我还不想将任何值传递给下一个活动。我希望下面的图片能让你明白我想要做什么。
换句话说,我希望我所做的每次点击都对应于 JSON 表。
【问题讨论】:
没有清楚的想法。您想在从列表视图中选择时获取 id 还是什么??? 我想在从列表视图中选择时获取团队的 ID。显示为 json 创建一个 NoLeagueMemberClass 的数组列表,然后使用您正在执行的 for 循环在该数组列表中添加对象。 我有你所说的 ArrayList。我想我必须在 onItemClick 方法中做一些事情。但我不知道是什么。正如我所说,当我单击列表视图的一行时,我想要真正的团队 ID。所以需要在那里做点什么。 【参考方案1】:"DDL":["Id":1,"name":"Aruba","Id":2,"name":"阿富汗","Id":3,"name ":"安哥拉","Id":4,"name":"Anguilla","Id":5,"name":"阿尔巴尼亚","Id":6,"name": "安道尔"]
以上代码显示的是Json数组,DDL是json数组标签名。
//国家微调器
private void getCountry()
StringRequest stringRequest = new StringRequest(Request.Method.GET,"URL",
new Response.Listener<String>()
@Override
public void onResponse(String response)
try
//Parsing the fetched Json String to JSON Object
JSONObject j = new JSONObject(response);
//Storing the Array of JSON String to our JSON Array
countryarray = j.getJSONArray("DDL");
//Calling method getStudents to get the students from the JSON Array
getCountries(countryarray);
catch (JSONException e)
e.printStackTrace();
,
new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
);
//Creating a request queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
//Adding request to the queue
requestQueue.add(stringRequest);
private void getCountries(final JSONArray jsonArrayC)
//Traversing through all the items in the json array
countrylist=new ArrayList<String>();
for(int i=0;i<jsonArrayC.length();i++)
try
//Getting json object
JSONObject json = jsonArrayC.getJSONObject(i);
countryid= Integer.valueOf(json.getString("Id"));
//Adding the name of the emtype to array list
countrylist.add(json.getString("name"));
catch (JSONException e)
e.printStackTrace();
countryspinner.setAdapter(new ArrayAdapter<String>(AddEmployee.this, android.R.layout.simple_spinner_dropdown_item, countrylist));
countryspinner.setSelection(99);
countryspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
countryid = (int) id + 1;
getState((int) id + 1);
@Override
public void onNothingSelected(AdapterView<?> parent)
);
【讨论】:
这个例子将帮助你解决上述问题 请添加更详细的解释-***.com/help/how-to-answer 你期待什么? 不要只发布代码 - 解释为什么这个解决方案有效! do yoy got it..first code是json数组,ddl是json标签名,使用belove代码检索我们从spinner中选择的iem的id【参考方案2】:您可以使用列表 Activity 并在其中显示所有数据,然后
protected void onListItemClick(ListView l, View v, int position, long id)
super.onListItemClick(l, v, position, id);
Intent i = new Intent(MainActivity.this,NextActivity.class);
startActivity(i);
可以从http://developer.android.com/reference/android/app/ListActivity.html获取更多详情
【讨论】:
以上是关于从 onItemClickListener 中的 JSON 对象获取 id的主要内容,如果未能解决你的问题,请参考以下文章
选择 json 对象时 ListView OnItemClickListener 崩溃
传递嵌套在片段中的 AdapterView.OnItemClickListener() 中的活动上下文 - 方法未定义
PullToRefreshListView组件的OnItemClickListener中的position下标问题
OnItemClickListener() 用于列表视图的每个项目中的微调器
如何使用 onItemClickListener 存储 ListView 中的可点击项目?
未调用 DrawerLayout 中的自定义 BaseAdapter ListView onItemClickListener