【问题标题】:Json Listview wont refresh after spinner event微调器事件后 Json Listview 不会刷新
【发布时间】:2017-07-11 17:55:53
【问题描述】:

我的问题是我的列表视图上有一个产品列表,当我从微调器中选择一个值时,我将其保存并发送以从我的 mysql 数据库中检索不同的值,我遇到的问题是我的列表视图不会在我的微调器上执行 onclick 事件后更新,我做错了什么?我不知道我是否能正确解释我想说的话,谢谢你的帮助

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
            {
                public void onItemSelected (AdapterView < ? > parent, View view,int pos, long id)
                {
                    filtracat();
                }


private void filtracat() {
    cat = spinner.getSelectedItemPosition()+1;
     valor = String.valueOf(cat);
    Toast.makeText(getApplicationContext(),valor,Toast.LENGTH_SHORT).show();
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(JSON_CAT, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            hideDialog();
            //parsing json
            for (int i = 0; i < response.length(); i++) {
                try {
                    JSONObject obj = response.getJSONObject(i);
                    Anuncios item = new Anuncios();
                    item.setKey(obj.getString("key"));
                    item.setTitulo(obj.getString("titulo"));
                    item.setImageID(obj.getString("imageID"));
                    item.setModelo(obj.getString("modelo"));
                    item.setPreco(obj.getString("preco"));
                    //gonna set category here
                    //    item.setCategoria(obj.getString("categoria"));
                    //add to array
                    array2.add(item);
                } catch (JSONException ex) {
                    ex.printStackTrace();
                }
            }
            adapter.notifyDataSetChanged();
        }
    }, new ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    }) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();

            params.put("valor", valor);
            return params;
        }


    };
AppController.getmInstance().addToRequesQueue(jsonArrayRequest);
}

我的列表视图中的原始数据来自

 private void sendRequest() {
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(JSON_URL, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            hideDialog();
            //parsing json
            for (int i = 0; i < response.length(); i++) {
                try {
                    JSONObject obj = response.getJSONObject(i);
                    Anuncios item = new Anuncios();
                    item.setKey(obj.getString("key"));
                    item.setTitulo(obj.getString("titulo"));
                    item.setImageID(obj.getString("imageID"));
                    item.setModelo(obj.getString("modelo"));
                    item.setPreco(obj.getString("preco"));
                    //gonna set category here
                //    item.setCategoria(obj.getString("categoria"));
                    //add to array
                    array.add(item);
                } catch (JSONException ex) {
                    ex.printStackTrace();
                }
            }
            adapter.notifyDataSetChanged();
        }
    }, new ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });
    AppController.getmInstance().addToRequesQueue(jsonArrayRequest);
}

我应该使用相同的数组来更新数据吗?

【问题讨论】:

    标签: java android mysql listview


    【解决方案1】:

    你可以试试

    1. 创建两个对象

            ArrayList<MobileKeyModel> dropDownModels = new ArrayList<MobileKeyModel>();
            ArrayList<Object> addList = new ArrayList<Object>();
      
    2. 您可以从数据库中获取响应

         private void filtracat() {
           StringRequest stringRequest = new StringRequest(Request.Method.POST, JSON_URL,
              new Response.Listener<String>() {
                  @Override
                  public void onResponse(String response) {
      
                      try {
                          JSONObject jsonObject = new JSONObject(response);
                          JSONArray loginNodes = jsonObject.getJSONArray("parentnodesList");
                          for (int i = 0; i < loginNodes.length(); i++) {
                              JSONObject jo = loginNodes.getJSONObject(i);
                              String key = jo.getString("key");
                              String titulo = jo.getString("titulo");
                              addList.add(key);
                              addList.add(titulo);
                          }
      
                          pupulateDropDownList();
                      } catch (JSONException e) {
                          e.printStackTrace();
                      }
                  }
              },
              new Response.ErrorListener() {
                  @Override
                  public void onErrorResponse(VolleyError error) {
      
                      try {
                          //Respose Error
      
                      } catch (Exception e) {
      
      
                      }
                  }
              }) {
          @Override
          protected Map<String, String> getParams() {
              Map<String, String> params = new HashMap<>();
              return params;
          }
      
      };
      
      
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
      }
      
    3. 将值填充到列表视图

      void pupulateDropDownList() {

      if (addList != null) {
          for (Iterator<Object> i = addList.iterator(); i.hasNext(); ) {
              MobileKeyModel menuModel = new MobileKeyModel(i.next().toString(), i.next().toString());
              dropDownModels.add(menuModel);
      
          }
      
          ArrayAdapter adapter = new ArrayAdapter(this, R.layout.spinner_text, dropDownModels);
          adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown);
          listView.setAdapter(adapter);
      
         }
      }
      
    4. 模型也在这里

      公共类 MobileKeyModel {

      public String key = "";
      public String titulo = "";
      
      public MobileKeyModel(String key, String titulo) {
          this.key = key;
          this.titulo = titulo;
      }
      
      public String getKey() {
          return key;
      }
      
      public void setKey(String key) {
          this.key = key;
      }
      
      public String getTitulo() {
          return titulo;
      }
      
      public void setTitulo(String titulo) {
          this.titulo = titulo;
      }
      

      }

    5. 注意你的 json 必须是这样的

          {"parentnodesList":[{"key":"your key value here","titulo":"Your title"}]}
      

    【讨论】:

    • 感谢 Enamul 的反馈,我不想将我从微调器中选择的内容添加到我的列表视图中,我试图做的是过滤原始列表视图,并从我的微调器发送值所以我可以将列表视图过滤为仅包含 1 个类别的产品,但我的列表视图不会更新...我已经填充了微调器,我只需要 id,然后在我的 php 上我将只选择产品该类别 ID
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2018-03-29
    • 1970-01-01
    • 2022-07-06
    相关资源
    最近更新 更多