【问题标题】:how to filter json object by String value in android?如何在android中按字符串值过滤json对象?
【发布时间】:2018-07-04 05:21:38
【问题描述】:

我在 recyclerview 中查看带有片段的寻呼机我想根据第一个片段中的值对解析 json 数据如果设备在线,我想要所有数据,第二个数据基于离线值任何建议将不胜感激。 我的 Json 值。

[
{
    "deviceId": "IVIS1475",
    "siteName": "IVIS1475    SBI-CHE-Coimbatore-Kangeyampalayam",
    "deviceStatus": "Offline",
    "hddStatus": "Ok",
    "powerSource": "Battery"
},
{
    "deviceId": "IVIS1354",
    "siteName": "IVIS1354    SBI-Trichy S.P Office Pudukottai",
    "deviceStatus": "Offline",
    "hddStatus": "Ok",
    "powerSource": "Battery"
},
{
    "deviceId": "IVIS1476",
    "siteName": "IVIS1476    SBI-Coimbatore Redfields Coimbatore",
    "deviceStatus": "Offline",
    "hddStatus": "Ok",
    "powerSource": ""
},
{
    "deviceId": "IVIS1355",
    "siteName": "IVIS1355    SBI-CHE-Pondicherry-Thiruvandarkoil Busstand",
    "deviceStatus": "Online",
    "hddStatus": "Not Ok",
    "powerSource": ""
},
{
    "deviceId": "IVIS1597",
    "siteName": "IVIS1597    SBI-Chennai 1 Melvisharam Vellore",
    "deviceStatus": "Online",
    "hddStatus": "Ok",
    "powerSource": "Mains"
},
{
    "deviceId": "IVIS2203",
    "siteName": "IVIS2203    SBI-Coimbatore Kutchery Strt Udamalpet",
    "deviceStatus": "Online",
    "hddStatus": "Ok",
    "powerSource": "Battery"
},
{
    "deviceId": "IVIS1478",
    "siteName": "IVIS1478    SBI-Coimbatore Officers Club ",
    "deviceStatus": "Offline",
    "hddStatus": "Ok",
    "powerSource": "Battery"
},
{
    "deviceId": "IVIS2205",
    "siteName": "IVIS2205    SBI-Coimbatore Municipal Cmplx Udamalpet",
    "deviceStatus": "Offline",
    "hddStatus": "Ok",
    "powerSource": "Battery"
},
{
    "deviceId": "IVIS2206",
    "siteName": "IVIS2206    SBI-Coimbatore Railway Station Tirupur",
    "deviceStatus": "Offline",
    "hddStatus": "Not Ok",
    "powerSource": "Battery"
},
{
    "deviceId": "IVIS2207",
    "siteName": "IVIS2207    SBI-Coimbatore Dr Nanjappa Rd Coimbatore",
    "deviceStatus": "Online",
    "hddStatus": "Not Ok",
    "powerSource": "Battery"
}]

根据设备状态,我想过滤 json 数据并添加到 recyclerivew 中,这是我的 recyclereviw 代码。

RequestQueue requestQueue = Volley.newRequestQueue(getContext());

    StringRequest stringRequest = new StringRequest(Request.Method.GET, projectDetailUrl, new Response.Listener<String>() {
        @Override
        public void onResponse(String response)
        {


               progressBar.setVisibility(View.GONE);

               GsonBuilder builder = new GsonBuilder();
               Gson mGson = builder.create();
               posts =new ArrayList<>(Arrays.asList(mGson.fromJson(response, ProDetail[].class)));

               adapter = new OnSiteAdapter( posts);
               recyclerView.setAdapter(adapter);
               final List<ProDetail> finalPosts = posts;
               ItemClickSupport.addTo(recyclerView).setOnItemClickListener(
                       new ItemClickSupport.OnItemClickListener()
                       {
                           @Override
                           public void onItemClicked(RecyclerView recyclerView, int position, View v) {
                               // do it
                               String deviceId = finalPosts.get(position).getDeviceId();
                               Intent proDetailIntent = new Intent(getContext(), SensorDetailAcitivity.class);
                               proDetailIntent.putExtra("deviceid", deviceId);
                               startActivity(proDetailIntent);


                           }
                       }
               );

           }



    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error)
        {
            progressBar.setVisibility(View.GONE);
            Toast.makeText(getActivity(), "Something went wrong", Toast.LENGTH_SHORT).show();

        }
    });
    requestQueue.add(stringRequest);

【问题讨论】:

标签: java android android-recyclerview


【解决方案1】:

您可以根据帖子列表创建两个列表

List<PostDetail> onlineList = new ArrayList<>();
List<PostDetail> offlineList = new ArrayList<>();
for(int i = 0; i < posts.size(); i++) {
    if(posts.get(i).getDeviceStatus.equals("Online")){
        onlineList.add(posts.get(i));
    } else if(posts.get(i).getDeviceStatus.equals("Offline")) {
        offlineList.add(posts.get(i));
    }
}

然后您可以在不同的屏幕或您需要的任何地方显示这两个列表

【讨论】:

    【解决方案2】:

    您应该创建两个单独的列表并用它们更新RecyclerView

    Java 8:

    List<PostDetail> onlinePostDetail = posts.stream()
        .filter(p -> p.getDeviceStatus().equals("Online"))
        .collect(Collectors.toList());
    List<PostDetail> offlinePostDetail = posts.stream()
        .filter(p -> p.getDeviceStatus().equals("Offline"))
        .collect(Collectors.toList());
    

    Java 8 以下:

     List<PostDetail> onlinePostDetail = new ArrayList();
     List<PostDetail> offlinePostDetail = new ArrayList();
     for(PostDetail p: posts) {
         if(p.getDeviceStatus().equals("Online")) {
             onlinePostDetail.add(p);
         } else if(p.getDeviceStatus().equals("Offline")) {
             offlinePostDetail.add(p);
         }
     }
    

    【讨论】:

      【解决方案3】:

      我在 android studio bumblebee 2022 中使用改造,作为回应使用这个

       override fun onResponse(call: Call<Responseagro>, response: Response<Responseagro>) {
      
                
                  val result : List<agrolokasiitem?>? = response.body()!!.data
      
                  val resultsearch = result!!.filter{agrolokasiitem: 
                  agrolokasiitem? -> agrolokasiitem?.'WHAT YOUR OBJECT'.equals("YOUR SEARCH") }
                  val layoutManager1 =
                   LinearLayoutManager(applicationContext, LinearLayoutManager.VERTICAL, false)
             
                  recycleview.layoutManager = layoutManager1
                  val sadapter = Adapter(applicationContext, resultsearch)
                  recycleview.adapter = sadapter
                  androidx.recyclerview.widget.LinearLayoutManager(activity)
                  recycleview .setHasFixedSize(true)
      
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多