我的微调包含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