2016-03-04 80 views
0

我正在使用Volley Library获取数据并将其填充到ListView中。它工作正常。但现在我需要实现搜索过滤器。我搞砸了它的实现。请帮助我。Volley Library数据库中的SearchView实现

在这里,我需要将我的搜索查询发送到服务器。

您的回答是更多的赞赏。

这里是我的代码来获得使用凌空库从服务器数据:

private void getData() { 
    final ProgressDialog loading = ProgressDialog.show(context, "Loading Data", "Please wait...", false, false); 
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Config.DATA_URL, new Response.Listener<JSONArray>() { 

     @Override 
     public void onResponse(JSONArray response) { 
      loading.dismiss(); 
      parseData(response); 
     } 
    }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
       } 
      }); 
    RequestQueue requestQueue = Volley.newRequestQueue(context); 
    requestQueue.add(jsonArrayRequest); 
} 

private void parseData(JSONArray array) { 

    for (int i = 0; i < array.length(); i++) { 
     Restaurant_Beam superHero = new Restaurant_Beam(); 
     JSONObject json = null; 
     try { 
      json = array.getJSONObject(i); 
      superHero.setStr_categoryName(json.getString(Config.CATEGORY_NAME)); 
      superHero.setStr_productName(json.getString(Config.PRODUCT_NAME)); 
      superHero.setStrPrice(json.getInt(String.valueOf(Config.PRICE))); 
      superHero.setImageUrl(json.getString(Config.TAG_IMAGE_URL)); 
      superHero.setTAB_NAME(json.getString(Config.TAB_NAME)); 
      superHero.setLikeCount(json.getInt(Config.LIKE_COUNT)); 
      superHero.setCommentCount(json.getInt(Config.COMMENT_COUNT)); 
      superHero.setProduct_id(json.getString(Config.PRODUCT_ID)); 
      String productId = json.getString(Config.LIKE_COUNT); 

      product_Id.add(productId); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     if (superHero.getTAB_NAME().contains(currentTab)) { 

      listSuperHeroes.add(superHero); 
      adapter = new CardAdapter(listSuperHeroes, context); 
      recyclerView.setAdapter(adapter); 
     } 
    } 
} 

回答

0

你不能使适配器的情况下在每一个加入项目。您必须在循环之前制作一个实例适配器并将其设置为您的回收站。然后在每次向数据添加项目后,notifyDatasetChenaged您的适配器。一切都好。 做你的parseDataData如下:

private void parseData(JSONArray array) { 
    //TODO make an instance listSuperHeroes 
    adapter = new CardAdapter(listSuperHeroes, context); 
    recyclerView.setAdapter(adapter); 
     for (int i = 0; i < array.length(); i++) { 
      Restaurant_Beam superHero = new Restaurant_Beam(); 
      JSONObject json = null; 
      try { 
       json = array.getJSONObject(i); 
       superHero.setStr_categoryName(json.getString(Config.CATEGORY_NAME)); 
       superHero.setStr_productName(json.getString(Config.PRODUCT_NAME)); 
       superHero.setStrPrice(json.getInt(String.valueOf(Config.PRICE))); 
       superHero.setImageUrl(json.getString(Config.TAG_IMAGE_URL)); 
       superHero.setTAB_NAME(json.getString(Config.TAB_NAME)); 
       superHero.setLikeCount(json.getInt(Config.LIKE_COUNT)); 
       superHero.setCommentCount(json.getInt(Config.COMMENT_COUNT)); 
       superHero.setProduct_id(json.getString(Config.PRODUCT_ID)); 
       String productId = json.getString(Config.LIKE_COUNT); 

       product_Id.add(productId); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      if (superHero.getTAB_NAME().contains(currentTab)) { 
       listSuperHeroes.add(superHero); 
       adapter.notifyDatasetChanged(); 
      } 
     } 
+0

请解释我。我不明白你想说什么。 @Haniyeh Khaksar –

+1

@ParamaSudha你无法在每个添加项目中生成一个适配器实例。您必须在循环之前制作一个实例适配器并将其设置为您的回收站。然后在每次向数据添加项目后,notifyDatasetChenaged您的适配器。 –

+0

非常感谢你 –