【问题标题】:Android populating spinners from mysql JSON dataAndroid 从 mysql JSON 数据填充微调器
【发布时间】:2017-12-03 00:40:43
【问题描述】:

我有 2 个微调器,一个用于省,另一个用于市。但是它们相互依赖。如果我在省微调器中选择豪登省,第二个微调器必须显示约翰内斯堡、比勒陀利亚、百夫长,如果我在省中选择 KZN,我希望第二个微调器显示彼得马里斯堡、德班、乌伦迪。

这是我的代码。我可以从我的 mysql 数据库中填充微调器,但我无法创建其他依赖项

第一个微调器 JSON 数据:

   "Provinces": [
    {
        "provinceid": "1",
        "provincename": "A"
    },
    {
        "provinceid": "2",
        "provincename": "B"
    }
]}

第二个微调器 JSON 数据:(与我的 php 和 db 中的省份相关。

//获取列出城市的值 $provinceid= $_POST['provinceid'];)

{
"Cities": [
    {
        "cityid": "1",
        "cityname": "AA"
    },
    {
        "cityid": "2",
        "cityname": "BB"
    }
]}

这是我的 java 代码。

private ArrayList<String> province;
private ArrayList<String> city;
private JSONArray provinces;

String ilceid;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
   setContentView(R.layout.activity_welcome);

                ilce = new ArrayList<String>();

                //Initializing Spinner
                spinner = (Spinner) findViewById(R.id.spinner);
                spinner2 = (Spinner) findViewById(R.id.spinner2);


                //Adding an Item Selected Listener to our Spinner
                //As we have implemented the class Spinner.OnItemSelectedListener to this class iteself we are passing this to setOnItemSelectedListener
                spinner.setOnItemSelectedListener(WelcomeActivity.this);
                spinner2.setOnItemSelectedListener(WelcomeActivity.this);
                getData();

}


private void getData(){
    //Creating a string request
    StringRequest stringRequest = new StringRequest(SharedPrefManager.DATA_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    JSONObject j = null;
                    try {
                        //Parsing the fetched Json String to JSON Object
                        j = new JSONObject(response);

                        //Storing the Array of JSON String to our JSON Array
                        provinces= j.getJSONArray(SharedPrefManager.JSON_ARRAY);


                        getProvinces(provinces);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });

    //Creating a request queue
    RequestQueue requestQueue = Volley.newRequestQueue(this);

    //Adding request to the queue
    requestQueue.add(stringRequest);
}
private void getProvinces(JSONArray j){
    //Traversing through all the items in the json array
    for(int i=0;i<j.length();i++){
        try {
            //Getting json object
            JSONObject json = j.getJSONObject(i);


            province.add(json.getString(SharedPrefManager.TAG_PROVINCENAME));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    //Setting adapter to show the items in the spinner
    spinner.setAdapter(new ArrayAdapter<String>(WelcomeActivity.this, android.R.layout.simple_spinner_dropdown_item, province));
}
private String getProvinceId(int position){
    String provid="";
    try {
        JSONObject json = provinces.getJSONObject(position);
        course = json.getString(SharedPrefManager.TAG_PROVINCEID);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return provid;
}


@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
}}

第一个微调器在这种情况下有效。但是我如何根据第一个微调器填充微调器2?

【问题讨论】:

    标签: php android mysql json


    【解决方案1】:

    您甚至不需要从数据库中获取这些数据,它们对所有用户都是相同的,并且无法更改,因此您可以将这些数据放入应用程序中。但是,如果您真的需要它,那么您将把它分开,当用户选择第一个选项时,您需要将其发布到 db 然后获取该选项的选项。如果我了解你真正需要的东西,我想没有别的办法了。

    【讨论】:

    • 是的,你是对的。但我的应用程序将在多变的省市运行。但我需要能够从数据库中更新省市。所以我无法更改应用程序中的数据@elvirt
    • 我不确定除了将第一个值发布到数据库并基于该获取第二个值之外是否还有其他选项。但这太慢了。如果您将所有数据放在设备上的 sqlite db 中,然后每天检查一次在线数据库中是否有更改,以及是否更新 sqlite db,该怎么办?
    • 其实我有。在我的 php 中,api 将第一个值发布到 db 并基于此获取值。我的问题出在 java 和 spinner 方法中。我怎么能在java中做?填充第一个微调器没关系。然后将数据发布到我的数据库并为 spinner2 获取第二个 json 数组并填充
    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多