在微调器中选择项目后,在textview中显示相应的json数据 [英] displaying corresponding json data in textview after selecting item in spinner

查看:87
本文介绍了在微调器中选择项目后,在textview中显示相应的json数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的微调器包含来自json的唯一标准值(例如:我的微调器仅包含7、8、6(我想要),而不是显示所有标准的确定性数据),如果选择了微调器项目,则它将获取相应的标准值关于在所选标准中学习的学生的所有信息.这是我的代码,

my spinner contains the unique standard value from json(like: my spinner contains only 7,8,6 (which i want,)instead of displaying all standard repitative data), if spinner item is selected, then it fetches the corresponding all information about that students who studying in that selectd standard. here is my code,

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标准的学生信息.这应该发生在微调器中的所有选择上(就像我的意思是,如果我选择标准8,那么它应该显示所有都在8标准中学习的学生信息,对于标准6也是如此)

but the problem is that when i am selecting standard 7 from my spinner it displaying only one student information. however i want all students information who all are studying in 7 standard. this should be happen for all choiecs in spinner (like i mean if i select standard 8 then it should display all students info who all are studying in 8 standard, same goes for standard 6)

例如,如果我从微调器中选择标准7,它应该显示学生aaa,学生ccc,学生ggg,学生www的所有信息,因为他们都在标准7中学习.

for exapmle if i select standard 7 from spinner, it should display all information of student aaa, student ccc, student ggg, student www as they all are studying in standard 7.

我尝试使用Google搜索来找出有关此问题的解决方案,但没有找到适合我问题的答案.我已经检查了stackoverflow的两个帖子,但他们还没有答案.

i tried googling to find out the solution on this question but i didn't found any answers suitable to my question. i have checked stackoverflow's two posts but they dont have answers yet.

什么是正确的方法?

推荐答案

因此,您想从选定的标准中获取所有学生的详细信息.这是可以解决您问题的代码.

So you want to get all students details from selected standards. Here is the code that will solve your problem.

使用getter和setter创建值布尔类

Create value boject class with getter's and setter's

public class StudentVO implements Serializable{

    private String name;
    private String surname;
    private String age;
    private String div;
    private String standard;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getDiv() {
        return div;
    }

    public void setDiv(String div) {
        this.div = div;
    }

    public String getStandard() {
        return standard;
    }

    public void setStandard(String standard) {
        this.standard = standard;
    }
}

现在在您要从微调器中选择标准的主类中,将代码替换为:

Now in your main class where you are selecting standard from spinner replace your code with:

//Add this
public class MainActivity extends AppCompatActivity {

ArrayList<String> AllStandards = new ArrayList<>();
private ArrayList<StudentVO> studentVOList = 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 {

                String standard = AllStandards.get(i);

                if (studentVOList.size() > 0)
                    studentVOList.clear();
                for (int j = 0; j < jsonArray.length(); j++) {
                    JSONObject jsonObject = jsonArray.getJSONObject(j);
                    String stand = jsonObject.getString("standard");
                    if (stand.equalsIgnoreCase(standard)) {
                        StudentVO studentVO = new StudentVO();
                        studentVO.setAge(jsonObject.getString("age"));
                        studentVO.setName(jsonObject.getString("name"));
                        studentVO.setDiv(jsonObject.getString("div"));
                        studentVO.setStandard(stand);
                        studentVOList.add(studentVO);
                    }
                }

                Log.d("TAG", "List With All Students in selected standard: "+studentVOList.size());

                Intent intent = new Intent(getApplicationContext(), StudentsInfo.class);
                Bundle b = new Bundle();
                b.putSerializable("list",studentVOList);

                intent.putExtra("bundle",b);

                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;
}
}

此后,您可以在StudentsInfo类中获得此列表,例如:

After this you can get this list in StudentsInfo class like:

Bundle b = getIntent().getBundleExtra("bundle");
ArrayList<StudentVO> studentVOList = (ArrayList<StudentVO>) b.getSerializable("list");

Log.d("TAG", "List Size; "+studentVOList.size());

您不需要从json数组中获取标准列表.您可以准备具有标准1,2,3 ....的学生的静态列表,依此类推,并将其传递给阵列适配器.

And you don't need to get list of standards from json array. You can prepare static list of students with standards 1,2,3.... so on and pass it to your array adapter.

查看我的调试结果:

我只是检查您的代码 删除

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"));

来自MainActivity的代码以及StudentInfo活动类的onCreate()方法中的代码,您可以像这样获得学生列表:

code from your MainActivity and in onCreate() method of StudentInfo activity class You can get list of students like:

Bundle b = getIntent().getBundleExtra("bundle");
    ArrayList<StudentVO> studentVOList = (ArrayList<StudentVO>) b.getSerializable("list");

这篇关于在微调器中选择项目后,在textview中显示相应的json数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆