私は2つのスピナーと2つのそれぞれ.json
ファイルを持っています。最初のSpinner
はカテゴリを保持し、2番目のサブカテゴリはカテゴリを保持します。特定のカテゴリを選択すると、それぞれのデータを読み込む必要があります。JSONをスピナーにロードするにはどうすればいいですか?
カテゴリーJSON
ファイル:
{
"Categories": {
"Category": [{
"cat_id": 1,
"cat_title": "..."
}, {
"cat_id": 2,
"cat_title": "..."
}, {
"cat_id": 3,
"cat_title": "..."
}]
}
}
サブカテゴリJSON
ファイル:
{
"Subcategories": {
"Subcategory": [{
"cat_id": 1,
"subcat_id": 1,
"subcat_title": ".."
}]
}
}
彼らは猫のIDにリンクされています。ローディングは、同一の方法によって制御される。ここで
は、カテゴリための方法である:
private void prepareCats() {
inputStream = getResources().openRawResource(R.raw.categories);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
ctr = inputStream.read();
while (ctr != -1) {
byteArrayOutputStream.write(ctr);
ctr = inputStream.read();
}
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
// Parse the data into jsonobject to get original data in form of json.
JSONObject jObject = new JSONObject(
byteArrayOutputStream.toString());
JSONObject jObjectResult = jObject.getJSONObject("Categories");
JSONArray jArray = jObjectResult.getJSONArray("Category");
String cat_title = "";
for(int i=0;i<jArray.length();i++){
cat.setCatname(jArray.getJSONObject(i).getString("cat_title"));
cat.setCatId(jArray.getJSONObject(i).getString("cat_id"));
Log.v("cat",cat.getCatname());
categories.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
System.out.println("cat position" + position);
catPosition = position;
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
categoriesList.add(cat.getCatname());
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout
.simple_spinner_item, categoriesList);
categories.setAdapter(
new NothingSelectedSpinnerAdapter(
dataAdapter,
R.layout.contact_spinner_cat_row_nothing_selected,
this));
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}
} catch (Exception e) {
e.printStackTrace();
}
}
とロードサブカテゴリ:私は必要なもの
private void prepareSubCats() {
inputStream = getResources().openRawResource(R.raw.subcategories);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
ctr = inputStream.read();
while (ctr != -1) {
byteArrayOutputStream.write(ctr);
ctr = inputStream.read();
}
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
// Parse the data into jsonobject to get original data in form of json.
JSONObject jObject = new JSONObject(
byteArrayOutputStream.toString());
JSONObject jObjectResult = jObject.getJSONObject("Subcategories");
JSONArray jArray = jObjectResult.getJSONArray("Subcategory");
String subcat_title = "";
for(int i=0;i<jArray.length();i++){
subcat.setSubCatname(jArray.getJSONObject(i).getString("subcat_title"));
subcat.setCatId(jArray.getJSONObject(i).getString("cat_id"));
subcategoriesList.add(subcat.getSubCatname());
subCategories.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
subcatPosition = position;
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout
.simple_spinner_item, subcategoriesList);
subCategories.setAdapter(
new NothingSelectedSpinnerAdapter(
dataAdapter,
R.layout.contact_spinner_subcat_row_nothing_selected,
this));
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}
} catch (Exception e) {
e.printStackTrace();
}
}
はなるように、カテゴリの猫のIDとサブカテゴリの猫のIDを比較することですサブカテゴリは、該当するカテゴリに入力します。
あなたがしている問題は何ですか顔? –
サブカテゴリーのリストを、選択したカテゴリに従って更新したい(cat1の場合、cat1プロパティを持つサブキャットのみ) – user6456773
すでに 'prepareSubCats'メソッドにロジック(コメント部分)があります。それは何が間違っていますか? –