当我在微调器适配器中设置时,ArrayList 给出空值?
ArrayList gives null when i set in the spinner adapter?
我有两个 spinner.one 代表国家名称,另一个代表区域 name.i 当我点击国家微调器并选择一个国家作为示例时,我想这样做,就像我选择印度一样根据我的 json。然后在区域微调器中只显示与 country.like 示例相关的区域,我选择印度然后只有印度区域将是 shown.but 在我的情况下整个区域将是 shown.but 我不不想要它。我想这样做它显示了 country.i 试图用模型 class 做到这一点的特定区域。但是当我到达国家/地区时,请查看我的 onCreateOptionsMenu() 方法代码,它给出了 null。我不知道我该怎么做?有人能告诉我吗??
这是我的 json :-
{
"Status": 1,
"StatusMessage": "Country and Country Area List",
"data": [
{
"CountryID": "1",
"CountryName": "India",
"CountryArea": [
{
"CountryID": "1",
"AreaID": "1",
"AreaName": "Kuwait City(Capital)"
},
{
"CountryID": "1",
"AreaID": "2",
"AreaName": " Hawally"
},
]
},
{
"CountryID": "2",
"CountryName": "Dubai",
"CountryArea": [
{
"CountryID": "2",
"AreaID": "6",
"AreaName": " Jeddah"
},
{
"CountryID": "2",
"AreaID": "7",
"AreaName": " Riyadh"
},
]
}
]
}
这是我解析 json 的方法:-
public void requestDataCountry() {
mProgressDialog.show();
StringRequest countrylistrequest = new StringRequest(Request.Method.GET, GlobalData.COUNTRYLISTURL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
mProgressDialog.dismiss();
final JSONObject jObject = new JSONObject(response);
if (jObject.getString("Status").equals("1")) {
JSONArray jsonArray = jObject.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
mCountryName = jsonObject.getString("CountryName");
mId = jsonObject.getString("CountryID");
getCountryId.add(mId);
pojoCityArea.setCountryName(mCountryName);
JSONArray jsonArray1 = jsonObject.getJSONArray("CountryArea");
for (int j = 0; j < jsonArray1.length(); j++) {
JSONObject jsonObject1 = jsonArray1.getJSONObject(j);
areaID = jsonObject1.getString("AreaID");
getAreaId.add(areaID);
mAreaName = jsonObject1.getString("AreaName");
mAreaList.add(mAreaName);
}
pojoCityArea.setCountryName(mCountryName);
pojoCityArea pojocityarea = new pojoCityArea();
pojoCityArea.setCountryName(mCountryName )
pojoCityArea.setAreaList(mAreaList);
mPojoCityAreaList.add(pojoCityArea);
}
countryAdapter.notifyDataSetChanged();
} else {
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("error:", "" + volleyError.getMessage());
if (volleyError.getMessage() == null)
requestDataCountry();
}
}) {
};
RequestQueue countryqueue = Volley.newRequestQueue(getContext());
countryqueue.add(countrylistrequest);
}
这是我设置微调器(国家和地区)的片段的 onCreateOptionsMenu() 方法:-
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu, menu);
super.onCreateOptionsMenu(menu, inflater);
this.menu = menu;
MenuItem menuItem = menu.findItem(R.id.menu_spinner).setVisible(true);
mCountrySpinner = (Spinner) MenuItemCompat.getActionView(menuItem);
for (PojoCityArea pojoCityArea : mPojoCityAreaList) {
mCountryList.add(pojoCityArea.getCountryName());
}
countryAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, mCountryList);
countryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mCountrySpinner.setAdapter(countryAdapter);
mCountrySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
mCountrySerachId = getCountryId.get(position);
mEditor.putString(KEY_COUNTRY_ID, mCountrySerachId);
mEditor.commit();
ArrayAdapter<String> areaAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_expandable_list_item_1, mPojoCityAreaList.get(position).getAreaList());
areaAdapter.setDropDownViewResource(android.R.layout.simple_expandable_list_item_1);
mSpinnerArea.setAdapter(areaAdapter);
mSpinnerArea.setTitle("Choose your area");
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
你最好使用数据库来解决这个问题。
首先,您必须在一个 table 中插入所有国家名称和国家 ID,并在另一个 table 中插入所有其他国家地区以及国家 ID,现在在 selection of country spinner 你只是根据数据库中的国家 ID 传递国家 ID 以获取国家区域(select countryareanames from table1 where countryid='country_id';)。将其存储到字符串类型的数组列表中,并将该数组列表设置为微调器。
我有两个 spinner.one 代表国家名称,另一个代表区域 name.i 当我点击国家微调器并选择一个国家作为示例时,我想这样做,就像我选择印度一样根据我的 json。然后在区域微调器中只显示与 country.like 示例相关的区域,我选择印度然后只有印度区域将是 shown.but 在我的情况下整个区域将是 shown.but 我不不想要它。我想这样做它显示了 country.i 试图用模型 class 做到这一点的特定区域。但是当我到达国家/地区时,请查看我的 onCreateOptionsMenu() 方法代码,它给出了 null。我不知道我该怎么做?有人能告诉我吗??
这是我的 json :-
{
"Status": 1,
"StatusMessage": "Country and Country Area List",
"data": [
{
"CountryID": "1",
"CountryName": "India",
"CountryArea": [
{
"CountryID": "1",
"AreaID": "1",
"AreaName": "Kuwait City(Capital)"
},
{
"CountryID": "1",
"AreaID": "2",
"AreaName": " Hawally"
},
]
},
{
"CountryID": "2",
"CountryName": "Dubai",
"CountryArea": [
{
"CountryID": "2",
"AreaID": "6",
"AreaName": " Jeddah"
},
{
"CountryID": "2",
"AreaID": "7",
"AreaName": " Riyadh"
},
]
}
]
}
这是我解析 json 的方法:-
public void requestDataCountry() {
mProgressDialog.show();
StringRequest countrylistrequest = new StringRequest(Request.Method.GET, GlobalData.COUNTRYLISTURL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
mProgressDialog.dismiss();
final JSONObject jObject = new JSONObject(response);
if (jObject.getString("Status").equals("1")) {
JSONArray jsonArray = jObject.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
mCountryName = jsonObject.getString("CountryName");
mId = jsonObject.getString("CountryID");
getCountryId.add(mId);
pojoCityArea.setCountryName(mCountryName);
JSONArray jsonArray1 = jsonObject.getJSONArray("CountryArea");
for (int j = 0; j < jsonArray1.length(); j++) {
JSONObject jsonObject1 = jsonArray1.getJSONObject(j);
areaID = jsonObject1.getString("AreaID");
getAreaId.add(areaID);
mAreaName = jsonObject1.getString("AreaName");
mAreaList.add(mAreaName);
}
pojoCityArea.setCountryName(mCountryName);
pojoCityArea pojocityarea = new pojoCityArea();
pojoCityArea.setCountryName(mCountryName )
pojoCityArea.setAreaList(mAreaList);
mPojoCityAreaList.add(pojoCityArea);
}
countryAdapter.notifyDataSetChanged();
} else {
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("error:", "" + volleyError.getMessage());
if (volleyError.getMessage() == null)
requestDataCountry();
}
}) {
};
RequestQueue countryqueue = Volley.newRequestQueue(getContext());
countryqueue.add(countrylistrequest);
}
这是我设置微调器(国家和地区)的片段的 onCreateOptionsMenu() 方法:-
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu, menu);
super.onCreateOptionsMenu(menu, inflater);
this.menu = menu;
MenuItem menuItem = menu.findItem(R.id.menu_spinner).setVisible(true);
mCountrySpinner = (Spinner) MenuItemCompat.getActionView(menuItem);
for (PojoCityArea pojoCityArea : mPojoCityAreaList) {
mCountryList.add(pojoCityArea.getCountryName());
}
countryAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, mCountryList);
countryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mCountrySpinner.setAdapter(countryAdapter);
mCountrySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
mCountrySerachId = getCountryId.get(position);
mEditor.putString(KEY_COUNTRY_ID, mCountrySerachId);
mEditor.commit();
ArrayAdapter<String> areaAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_expandable_list_item_1, mPojoCityAreaList.get(position).getAreaList());
areaAdapter.setDropDownViewResource(android.R.layout.simple_expandable_list_item_1);
mSpinnerArea.setAdapter(areaAdapter);
mSpinnerArea.setTitle("Choose your area");
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
你最好使用数据库来解决这个问题。 首先,您必须在一个 table 中插入所有国家名称和国家 ID,并在另一个 table 中插入所有其他国家地区以及国家 ID,现在在 selection of country spinner 你只是根据数据库中的国家 ID 传递国家 ID 以获取国家区域(select countryareanames from table1 where countryid='country_id';)。将其存储到字符串类型的数组列表中,并将该数组列表设置为微调器。