0
2つのAPIと2つのスピナーがあります.1つは州のリスト用、もう1つは都市のリスト用です。都市リストのJSONArrayがnullの場合もあります。だから私はボレーのJSONの解析でそのヌルがスピナーにデフォルトのメッセージを設定しているかどうかチェックしたいと思います。しかし、デフォルトのメッセージが表示されません。その代わりに、デフォルトで設定されている州の都市リストを示す。これにはどんな解決策がありますか? JSON配列の状態をチェックするためのコードの下jsonarrayがnullの場合、スピナーを空白に設定します。
// null city list
{
"citylist": []
}
// JSON for state list
{
"statelist": [
{
"state_id": "1",
"state_name": "West bengal"
},
{
"state_id": "3",
"state_name": "Himachal Pradesh"
},
{
"state_id": "4",
"state_name": "Maharashtra"
},
{
"state_id": "11",
"state_name": "Queensland"
}
]
}
public class MainActivity extends AppCompatActivity {
private static final String STATE = "http://example.com/ubooktoday/android/showstatebycountry";
private static final String CITY = "http://example.com/ubooktoday/android/showcitybystate";
Spinner spin1, spin2;
String stateid, cityid, zipid;
ArrayList<String> namelist, idlist;
ArrayAdapter<String> adapter;
HashMap<String,String> spinnerMap1, spinnerMap2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spin1=(Spinner)findViewById(R.id.spin1);
spin2=(Spinner)findViewById(R.id.spin2);
namelist = new ArrayList<String>();
idlist = new ArrayList<String>();
loadstate();
spin1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String statename = spin1.getSelectedItem().toString();
stateid = spinnerMap1.get(statename);
//Toast.makeText(getApplicationContext(), stateid, Toast.LENGTH_SHORT).show();
loadcity();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
spin2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String cityname = spin2.getSelectedItem().toString();
cityid = spinnerMap2.get(cityname);
Toast.makeText(getApplicationContext(), cityid, Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
private void loadstate() {
if(namelist!=null)namelist.clear();
if(idlist!=null)idlist.clear();
StringRequest stringRequest = new StringRequest(Request.Method.POST, STATE,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jObj = new JSONObject(response);
JSONArray jsonArray = jObj.getJSONArray("statelist");
for(int i=0; i<jsonArray.length(); i++){
JSONObject obj = jsonArray.getJSONObject(i);
namelist.add(obj.getString("state_name"));
idlist.add(obj.getString("state_id"));
String[] spinnerArray = new String[idlist.size()];
spinnerMap1 = new HashMap<String, String>();
for (int j = 0; j < idlist.size(); j++)
{
spinnerMap1.put(namelist.get(j),idlist.get(j));
spinnerArray[j] = namelist.get(j);
}
adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_spinner_item, spinnerArray);
spin1.setAdapter(adapter);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("country_id", "2");
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
requestQueue.add(stringRequest);
}
private void loadcity() {
if(namelist!=null)namelist.clear();
if(idlist!=null)idlist.clear();
StringRequest stringRequest = new StringRequest(Request.Method.POST, CITY,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jObj = new JSONObject(response);
JSONArray jsonArray = jObj.getJSONArray("citylist");
if(jsonArray.equals("null")){
namelist.add("No Items");
adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_spinner_item, namelist);
spin2.setAdapter(adapter);
}else{
for(int i=0; i<jsonArray.length(); i++){
JSONObject obj = jsonArray.getJSONObject(i);
namelist.add(obj.getString("city_name"));
idlist.add(obj.getString("city_id"));
String[] spinnerArray = new String[idlist.size()];
spinnerMap2 = new HashMap<String, String>();
for (int j = 0; j < idlist.size(); j++)
{
spinnerMap2.put(namelist.get(j),idlist.get(j));
spinnerArray[j] = namelist.get(j);
}
adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_spinner_item, spinnerArray);
spin2.setAdapter(adapter);
}
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("state_id", stateid);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
requestQueue.add(stringRequest);
}
}
感謝。今働いている。 – CodeAssasins
コーディングをお楽しみください.... – Vickyexpert
こんにちは。もう一つの問題があります。上記のコードを使って第1のスピナーが 'No Items'に設定されている場合、第2のスピナーの値を' No Items'とする方法は? @Vickyexpert – CodeAssasins