Java 当用户单击spinner中的一个项目时,应该会显示另一个项目数据将从JSON webservice获取
我已经编写了从json web服务获取数据的代码,并以微调器(下拉菜单)的方式显示。现在我想编辑微调器,就像当用户单击country时,它应该获得states值。我如何才能做到这一点 通过在google上搜索,我已经尝试并编写了从web服务获取数据的代码,并显示在微调器中,但它显示了来自web服务的全部数据,如id名称旗国。现在我想编辑它,就像单击印度一样,它应该显示印度州的值 检查Java 当用户单击spinner中的一个项目时,应该会显示另一个项目数据将从JSON webservice获取,java,android,json,drop-down-menu,android-spinner,Java,Android,Json,Drop Down Menu,Android Spinner,我已经编写了从json web服务获取数据的代码,并以微调器(下拉菜单)的方式显示。现在我想编辑微调器,就像当用户单击country时,它应该获得states值。我如何才能做到这一点 通过在google上搜索,我已经尝试并编写了从web服务获取数据的代码,并显示在微调器中,但它显示了来自web服务的全部数据,如id名称旗国。现在我想编辑它,就像单击印度一样,它应该显示印度州的值 检查 专用微调器微调器; 私有文本视图文本视图; @凌驾 创建时受保护的void(Bundle savedInstan
专用微调器微调器;
私有文本视图文本视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=findviewbyd(R.id.Toolbar);
设置支持操作栏(工具栏);
FloatingActionButton fab=findViewById(R.id.fab);
微调器=findViewById(R.id.spinner);
textView=findViewById(R.id.text\u视图);
fab.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图){
fetchJsonDataFromUrl();
}
});
}
私有void fetchJsonDataFromUrl(){
JsonArrayRequest JsonArrayRequest=新的JsonArrayRequest(Request.Method.GET,URL,null,new Response.Listener()){
@凌驾
公共void onResponse(JSONArray响应){
parseJson(响应);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
错误。printStackTrace();
}
});
newRequestQueue(this.add)(jsonArrayRequest);
}
私有void parseJson(JSONArray响应)
{
列表国家=新的ArrayList();
试一试{
对于(int i=0;i0){
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u下拉菜单\u项,国家/地区);
旋转器。设置适配器(适配器);
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener()
{
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
Country=countries.get(位置);
String meta=“ID:”+country.getCid()+”\n名称:“+country.getName()+”\n标签:“+country.getFlag()+”\n状态:“+country.getStates()”;
setText(meta);
}
@凌驾
未选择公共无效(AdapterView父级)
{
}
});
}
}
}
是否要在另一个视图中显示州名称 我认为您应该使用自定义适配器在微调器中显示国家,因为您通过默认的适配器中的列表
国家,它将显示所有国家,而不只是名称。
private Spinner spinner;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
spinner = findViewById(R.id.spinner);
textView = findViewById(R.id.text_view);
fab.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
fetchJsonDataFromUrl();
}
});
}
private void fetchJsonDataFromUrl() {
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, URL, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
parseJson(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
Volley.newRequestQueue(this).add(jsonArrayRequest);
}
private void parseJson(JSONArray response)
{
List<Country> countries = new ArrayList<>();
try {
for (int i = 0; i < response.length(); i++) {
JSONObject obj = response.getJSONObject(i);
String cid = obj.getString("CID");
String countryName = obj.getString("CName");
String flag = obj.getString("Flag");
String states = obj.getString("States");
countries.add(new Country(cid, countryName, flag, states));
}
Spinner(countries);
} catch (JSONException e) {
e.printStackTrace();
}
}
private void Spinner(final List<Country> countries) {
if (countries.size() > 0) {
ArrayAdapter<Country> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, countries);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Country country = countries.get(position);
String meta = "ID: " + country.getCid() + "\nNAME: " + country.getName() + "\nFLAG: " + country.getFlag() + "\nSTATES: " + country.getStates();
textView.setText(meta);
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
});
}
}
}