Android 在选定的微调器上调用JSON,并将数据显示到另一个微调器中
我正在制作一个android应用程序,其中我使用了两个微调器。在第一个微调器中,我显示了来自JSON的数据,我已经成功地完成了这项工作。现在,通过单击第一个微调器的一项,我需要将来自另一个JSON服务的数据显示到第二个微调器中Android 在选定的微调器上调用JSON,并将数据显示到另一个微调器中,android,json,android-spinner,Android,Json,Android Spinner,我正在制作一个android应用程序,其中我使用了两个微调器。在第一个微调器中,我显示了来自JSON的数据,我已经成功地完成了这项工作。现在,通过单击第一个微调器的一项,我需要将来自另一个JSON服务的数据显示到第二个微调器中 ArrayList<String> categories = new ArrayList<String>(); try { JSONObject object = result.getJSONObject("r
ArrayList<String> categories = new ArrayList<String>();
try {
JSONObject object = result.getJSONObject("result");
JSONArray array = object.getJSONArray("data");
for(int a = 0; a < array.length(); a++) {
String cityName = array.getJSONObject(a).getString("city_name");
if(cityName.equals(selectedCity)) // this check is important
{
categories.add(cityName );
}
}
// after for loop ends populate adapter of second spinner
ArrayAdapter<String> adapt = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, categories);
spinner2.setAdapter(adapt);
}
catch(Exception e) {
e.printStackTrace();
}
第一个服务(我在第一个旋转器上显示此服务的城市名称):
{"result":{"data":[{"city_id":"16","city_name":"\u00c4ngelholm"},
{"city_id":"23","city_name":"B\u00e5stad"},
{"city_id":"22","city_name":"Halmstad"},
{"city_id":"19","city_name":"H\u00f6gan\u00e4s"},{"city_id":"20","city_name":"Helsingborg"},
{"city_id":"15","city_name":"Klippan"},
{"city_id":"24","city_name":"Kungsbacka"},
{"city_id":"21","city_name":"Laholm"},{"city_id":"18","city_name":"Landskrona"}],
"status":"true","description":""}}
{"result":{"data":[{"category_id":"18","category":"Aff\u00e4rsverksamhet",
"city_id":"16","city_name":"\u00c4ngelholm"},{"category_id":"19","category":"\u00d6vrigt",
"city_id":"16","city_name":"\u00c4ngelholm"},{"category_id":"13","category":"Bostad",
"city_id":"16","city_name":"\u00c4ngelholm"},{"category_id":"15","category":"Elektronik",
"city_id":"16","city_name":"\u00c4ngelholm"},{"category_id":"12","category":"F\u00f6r hemmet","city_id":"16","city_name":"\u00c4ngelholm"},{"category_id":"11","category":"Fordon",
"city_id":"16","city_name":"\u00c4ngelholm"},
{"category_id":"16","category":"Fritid & Hobby",
"city_id":"16","city_name":"\u00c4ngelholm"}],
"status":"true","description":""}}
第二服务:
{"result":{"data":[{"city_id":"16","city_name":"\u00c4ngelholm"},
{"city_id":"23","city_name":"B\u00e5stad"},
{"city_id":"22","city_name":"Halmstad"},
{"city_id":"19","city_name":"H\u00f6gan\u00e4s"},{"city_id":"20","city_name":"Helsingborg"},
{"city_id":"15","city_name":"Klippan"},
{"city_id":"24","city_name":"Kungsbacka"},
{"city_id":"21","city_name":"Laholm"},{"city_id":"18","city_name":"Landskrona"}],
"status":"true","description":""}}
{"result":{"data":[{"category_id":"18","category":"Aff\u00e4rsverksamhet",
"city_id":"16","city_name":"\u00c4ngelholm"},{"category_id":"19","category":"\u00d6vrigt",
"city_id":"16","city_name":"\u00c4ngelholm"},{"category_id":"13","category":"Bostad",
"city_id":"16","city_name":"\u00c4ngelholm"},{"category_id":"15","category":"Elektronik",
"city_id":"16","city_name":"\u00c4ngelholm"},{"category_id":"12","category":"F\u00f6r hemmet","city_id":"16","city_name":"\u00c4ngelholm"},{"category_id":"11","category":"Fordon",
"city_id":"16","city_name":"\u00c4ngelholm"},
{"category_id":"16","category":"Fritid & Hobby",
"city_id":"16","city_name":"\u00c4ngelholm"}],
"status":"true","description":""}}
正如您在这两个服务中所看到的,city\u id
和city\u name
都是公共字段。如果我从第一个微调器中选择city\u name
,它将通过city\u id
或city\u name
匹配,并根据该city\u name
显示类别
下面是我尝试过的代码
private class AllCities extends AsyncTask<String, String, JSONObject>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
}
@Override
protected JSONObject doInBackground(String... params)
{
try
{
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("url of First Service");
HttpResponse resp = client.execute(post);
HttpEntity entity = resp.getEntity();
String response = EntityUtils.toString(entity);
return new JSONObject(response);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(JSONObject result)
{
super.onPostExecute(result);
if(result != null)
{
myList = new ArrayList<HashMap<String,String>>();
if(! result.has("false"))
{
try
{
JSONObject object = result.getJSONObject("result");
JSONArray array = object.getJSONArray("data");
stringArray = new ArrayList<String>();
for(int i=0; i<array.length(); i++)
{
HashMap<String, String> map = new HashMap<String, String>();
map.put("city_id", array.getJSONObject(i).getString("city_id"));
map.put("city_name", array.getJSONObject(i).getString("city_name"));
myList.add(map);
stringArray.add(array.getJSONObject(i).getString("city_name"));
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(PostAdds.this,
android.R.layout.simple_spinner_item, stringArray);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_city.setAdapter(adapter);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
else if(result == null)
{
Toast.makeText(PostAdds.this,
"Hittade inga Detaljer Vänligen Kontrollera din Internet-anslutning",
Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
//what am I suppose to do here????
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
私有类AllCities扩展异步任务
{
@凌驾
受保护的void onPreExecute()
{
super.onPreExecute();
}
@凌驾
受保护的JSONObject doInBackground(字符串…参数)
{
尝试
{
HttpClient=new DefaultHttpClient();
HttpPost=新的HttpPost(“第一个服务的url”);
HttpResponse resp=client.execute(post);
HttpEntity=resp.getEntity();
字符串响应=EntityUtils.toString(实体);
返回新的JSONObject(响应);
}
捕获(例外情况除外)
{
例如printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(JSONObject结果)
{
super.onPostExecute(结果);
如果(结果!=null)
{
myList=新的ArrayList();
如果(!result.has(“false”))
{
尝试
{
JSONObject object=result.getJSONObject(“结果”);
JSONArray数组=object.getJSONArray(“数据”);
stringArray=新的ArrayList();
对于(int i=0;i父级)
{
}
对于迟交的答案,我感到抱歉。我自己解决了这个问题,但从未回到这里发布对我有效的解决方案。现在,如果任何人有同样的问题,我都会发布这个答案,可以从这里获得帮助
那么我做了什么
1)调用第一个服务并在第一个微调器上填充城市名称,当选择第一个微调器的项目时,将其值保存在全局字符串中,如
字符串选择城市;
selectedCity=spinner1.getSelectedItem().toString();
2)单击第一个微调器的任何项目时,调用第二个服务并在填充第二个微调器时进行简单检查
ArrayList<String> categories = new ArrayList<String>();
try {
JSONObject object = result.getJSONObject("result");
JSONArray array = object.getJSONArray("data");
for(int a = 0; a < array.length(); a++) {
String cityName = array.getJSONObject(a).getString("city_name");
if(cityName.equals(selectedCity)) // this check is important
{
categories.add(cityName );
}
}
// after for loop ends populate adapter of second spinner
ArrayAdapter<String> adapt = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, categories);
spinner2.setAdapter(adapt);
}
catch(Exception e) {
e.printStackTrace();
}
ArrayList categories=new ArrayList();
试一试{
JSONObject object=result.getJSONObject(“结果”);
JSONArray数组=object.getJSONArray(“数据”);
对于(int a=0;a
通过这种方式,我得到了我想要的结果。这个问题还有其他解决方案,其中之一就是当您调用第二个服务pass city_id或city_name以及url作为参数时,服务将只返回您想要的类别
希望这能解决任何有类似问题的人。我今天只是检查了我的Stackoverflow
档案,发现这个问题没有任何人回答,所以我自己做了:)你到底在寻找什么?要么填充第二个微调器,要么在第二个微调器中应用json的过滤器?@kamil我想填充第二个微调器
(通过单击第一个微调器
的项目)并显示类别
(从第二个服务
)。只有那些类别应该显示在第二个微调器中,其城市id
或城市名称
将被匹配。正如我在问题中提到的,服务城市id
和城市名称
都是公共属性。@ZubairAhmadKhan你解决了这个问题吗?如果你解决了,我真的需要解决方案:)