【问题标题】:Loop through JSONObject and fill the spinner dynamically循环遍历 JSONObject 并动态填充微调器
【发布时间】:2019-10-27 16:16:56
【问题描述】:

我在 android 上使用 volley 库,我必须解析这个 JSON 并用一些来自 volley 响应的值填充我的微调器,这些值嵌套在不同的 json 对象中。

这里是 JSON:

{
"Count": 2,
"0": {
    "Distributore Information": {
        "id_distributore": "1",
        "NomeDistributore": "Colonnina 1",
    }
},
"1": {
    "Distributore Information": {
        "id_distributore": "2",
        "NomeDistributore": "Colonnina 2",
    }
}
}

这里是我写的代码:

private void getInfoColonnina(){
    String url = "https://api.thisurlsidhiddenbutitsworknp_module_json";
    final SharedPreferences myPref = getSharedPreferences("loginPref", MODE_PRIVATE);
    final SharedPreferences.Editor myPreff = myPref.edit();

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Toast.makeText(InizioTurnoActivity.this, "CHIAMATA INFOCOLONNINA AVVENUTA CON SUCCESSO", Toast.LENGTH_SHORT).show();
            try {
                JSONObject jsonObject = new JSONObject(response);
                Iterator<String> keys = jsonObject.keys();

                while(keys.hasNext()) {
                    String key = keys.next();
                    if (jsonObject.get(key) instanceof JSONObject) {

                        JSONObject infoDistributore = jsonObject.getJSONObject("Distributore Information");
                        LitriColonnina = infoDistributore.getString("litriiniziocolonna");
                        id_distributore = infoDistributore.getString("id_distributore");
                        NomeDistributore = infoDistributore.getString("NomeDistributore");
                    }
                }

                    final DistrBean distrTest = new DistrBean(NomeDistributore, id_distributore, LitriColonnina);

                    MaterialSpinner spinner = (MaterialSpinner) findViewById(R.id.spinner);
                    spinner.setItems(distrTest.getNomeDistributore());
                    spinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() {
                        @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) {
                            Toast.makeText(InizioTurnoActivity.this, distrTest.getIdDistributore(), Toast.LENGTH_SHORT).show();
                            myPreff.putString("id_distributore", distrTest.getIdDistributore());
                            myPreff.commit();
                        }
                    });

            } catch (JSONException e) {
                e.printStackTrace();
            }

所以代码应该迭代并创建填充微调器但不起作用的对象。 Ff 我只解析一个对象并填充微调器,它工作正常并且看起来也很好,但我真的不知道如何通过 JSON 循环获取我需要的所有数据,每个“id_distributore”和“NomeDistributore”有什么想法吗?

提前致谢!

【问题讨论】:

    标签: android json android-volley


    【解决方案1】:

    您应该使用 ArrayAdapter 来代替 spinner ,而不是使用 List 将您的元素添加到 ArrayAdapter

    因此,将您的元素动态添加到List,然后在for loop 之后将list 放入ArrayAdapter,最后将adapter 设置为spinner

    例子:

    ArrayAdapter<String> arrayAdapter;
    arrayAdapter= new ArrayAdapter<String>(this, R.layout.spinner_indication, yourList); //yourList is the List your create dynamically in the for loop with the elements from the Json file
    Spinner yourSpinner;
    yourSpinner.setAdapter(arrayAdapter);
    

    很有帮助:

    您还可以在此之后将其他元素添加到您的微调器中,方法是将这些元素添加到列表中,而不是使用适配器:

    arrayAdapter.notifyDataSetChanged();
    

    编辑:

    您的 Json 文件格式错误,应该如下所示:

    {
        "Count": "2",
      "0": {
        "Distributore Information": {
          "id_distributore": "1",
          "NomeDistributore": "Colonnina 1"
        }
      },
      "1": {
        "Distributore Information": {
          "id_distributore": "2",
          "NomeDistributore": "Colonnina 2"
        }
      }
    }
    

    在你的 php 文件中使用:

    echo json_encode($response); //response in array containing your fetched data
    

    检查你的 Json here

    【讨论】:

    • 这里最大的问题是如何循环JSONObject?你知道怎么做吗?
    • @Nicola parsing Json 是另一个问题伙伴,请提供您的 PHP 文件,即:如何生成该文件?
    • 我没有在后端工作,我无法更改响应,
    • @Nicola 解析 Json 没什么大不了的,您可以手动或在第三方库的帮助下完成,但您应该联系您的后端提供商解决此问题
    猜你喜欢
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    相关资源
    最近更新 更多