Получение идентификатора из JSON-объектов внутри onItemClickListener
Прежде всего я использую библиотеку залпа для моего почтового запроса. В этом случае я получаю в ответ от сервера следующий формат 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 и отображаю объекты массива команды в списке.
Теперь я хочу сохранить в массиве String значения идентификаторов выбранных команд. Есть идеи по этому поводу?
Вот часть кода
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.
2 ответа
{"DDL":[{"Идентификатор":1,"название": "Аруба"}, { "Идентификатор":2,"название": "Афганистан"}, { "Идентификатор":3,"название":" Ангола "}, {" Идентификатор ":4," название ":" Ангилья "}, {" Идентификатор ":5," название ":" Албания "}, {" Идентификатор ":6," название ":" Андорра"}]}
Приведенный выше код показывает массив Json, а DDL - имя тега массива json.
// Страна Spinner
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) {
}
});
}
Вы можете использовать список 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