我的微調包含json的唯一標準值(例如:我的微調只包含7,8,6(我希望)而不是顯示所有標準的轉錄數據),如果選擇了微調項目,則它獲取關於在該選擇的標準中學習的那些學生的相應的所有信息。這裏是我的代碼,在選擇Spinner中的項目後,在textview中顯示相應的json數據
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
ArrayList<String> AllStandards = new ArrayList<>();
ArrayAdapter<String> adapter;
JSONArray jsonArray;
Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final List<String> items = getCountries("data.json");
spinner = (Spinner) findViewById(R.id.spinnerStandard);
adapter = new ArrayAdapter<String>(this, R.layout.second_layout, R.id.txtStandard, items);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
try {
Intent intent = new Intent(getApplicationContext(), StudentsInfo.class);
intent.putExtra("name", jsonArray.optJSONObject(i).getString("name"));
intent.putExtra("surname", jsonArray.optJSONObject(i).getString("surname"));
intent.putExtra("age", jsonArray.optJSONObject(i).getString("age"));
intent.putExtra("div", jsonArray.optJSONObject(i).getString("div"));
startActivity(intent);
} catch (JSONException e) {
e.printStackTrace();
}
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
spinner.setAdapter(adapter);
}//onCreate Method
private List<String> getCountries(String fileName) {
jsonArray = null;
//ArrayList<String> cList = new ArrayList<String>();
try {
InputStream is = getResources().getAssets().open(fileName);
int size = is.available();
byte[] data = new byte[size];
is.read(data);
is.close();
String json = new String(data, "UTF-8");
AllStandards.clear();
try {
jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String stand = jsonObject.getString("standard");
if (!AllStandards.contains(stand)) {
AllStandards.add(stand);
}
}
}
catch (JSONException je) {
je.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}catch (IOException e) {
e.printStackTrace();
}
return AllStandards;
}
}
這裏是JSON數據,
[
{
"name":"aaa",
"surname":"bbb",
"age":"18",
"div":"A",
"standard":"7"
},
{
"name":"ccc",
"surname":"ddd",
"age":"17",
"div":"B",
"standard":"7"
},
{
"name":"eee",
"surname":"fff",
"age":"18",
"div":"A",
"standard":"8"
},
{
"name":"ggg",
"surname":"hhh",
"age":"17",
"div":"A",
"standard":"7"
},
{
"name":"sss",
"surname":"ddd",
"age":"18",
"div":"A",
"standard":"8"
},
{
"name":"www",
"surname":"ggg",
"age":"17",
"div":"A",
"standard":"7"
},
{
"name":"ggg",
"surname":"ccc",
"age":"18",
"div":"B",
"standard":"6"
}
但問題是,當我從我的微調選擇標準7它顯示只有一個學生的信息。但是我希望所有學生的信息都在7標準中學習。這應該發生在微調的所有choiecs(就像我的意思是如果我選擇標準8,那麼它應該顯示所有學生的信息誰都在學習8標準,同樣的標準6)
exapmle如果我選擇標準7從微調,它應顯示學生aaa,學生ccc,學生ggg,學生www的所有信息,因爲他們都在標準7學習。
我試着用谷歌搜索找出解決這個問題,但我沒有找到任何適合我的問題的答案。我檢查了stackoverflow的兩個職位,但他們沒有答案呢。
這樣做的正確方法是什麼?
你是否檢查了從微調器中選擇的索引?它與你的json數組索引匹配嗎? – Piyush
我也想這樣做,但我很困惑如何做到這一點,以獲得正確的數據在該位置 – neeta
一個解決方案是你可以準備從你的JSON數組字符串列表作爲價值標準,稍後在微調你可以通過使用list.indexOf(選擇的標準)獲得選定標準的索引,並通過使用索引,你可以從你的json數組獲得json對象 – Piyush