从数据库中过滤ArrayList

问题描述 投票:1回答:2

我想用数据库中的值过滤ArrayList

这是我的过滤器代码,我创建并“过滤”适配器:

// Inicializar adaptador
Log.d("DIATX", String.valueOf(8));
for(int i=0;i<metas.size();i++){
     if(metas.getObject(i).miId != null){
          filteredArr.put(metas.getObject(i));
     }
}
adapter = new MetaAdapter_Asistencia(Arrays.asList(metas), getActivity(), myId);
// Setear adaptador a la lista
lista.setAdapter(adapter);
progressBar_first.setVisibility(View.INVISIBLE);

这个问题的主要问题是我收到了这个错误:无法解析方法'getObject(int)'和大小。有没有其他方法来过滤我的数组?感谢您的回答。

这是我在创建数组之前的代码:

public void cargarAdaptador() {
    VolleySingleton.getInstance(getActivity()).addToRequestQueue(
        new JsonObjectRequest(
             Request.Method.GET,
             Constantes.GET_Asistencia,
             null,
             new Response.Listener<JSONObject>() {

                 @Override
                 public void onResponse(JSONObject response) {
                     // Procesar la respuesta Json
                     procesarRespuesta(response);
                 }
             },
             new Response.ErrorListener() {
                 @Override
                 public void onErrorResponse(VolleyError error) {
                     Log.d(TAG, "Error Volley: " + error.toString());
                 }
             }
        )
    );
}
public void procesarRespuesta(JSONObject response) {
    try {
        // Obtener atributo "estado"
        String estado = response.getString("estado");
        switch (estado) {
            case "1": // EXITO
            // Obtener array "metas" Json
            JSONArray mensaje = response.getJSONArray("metas");

            Meta_Asistencia[] metas = gson.fromJson(mensaje.toString(), Meta_Asistencia[].class);

            // APLICACIÓN DE ORDEN:
            // Ordenar el array de metas por idMeta de forma descendente:
            Arrays.sort(metas, new Comparator<Meta_Asistencia>() {
                int result;
                DateFormat f = new SimpleDateFormat("yyyy-mm-dd", Locale.ENGLISH);

            @Override
            public int compare(Meta_Asistencia objeto1, Meta_Asistencia objeto2) {
                // Comparamos por fechaLim de forma descendente:
                try {
                    result = f.parse(objeto2.dia).compareTo(f.parse(objeto1.dia));
                    Log.d("DIA", objeto1.dia);
                    Log.d("DIA1", objeto2.dia);
                    Log.d("ordenar", String.valueOf(result));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                return result;
            }
        });

        // Inicializar adaptador
        for(int i=0;i<metas.size();i++){
             if(metas.getObject(i).miId != null){
                  filteredArr.put(metas.getObject(i));
             }
        }
        adapter = new MetaAdapter_Asistencia(Arrays.asList(metas), getActivity());
        // Setear adaptador a la lista
        lista.setAdapter(adapter);
        progressBar_first.setVisibility(View.INVISIBLE);
    }
}

miidf1是我的数据库元素的4个id所以这里是我的过滤器代码:

                Log.d("miidf", myId);
                for(int i=0;i<metas.length;i++){
                    Log.d("miidf1", String.valueOf(metas[i].getId_musico()));
                    if(metas[i].getId() != null && 
                        metas[i].getId_musico().equals(myId)){

                        filteredArr.put(metas[i]);
                    }

                }

和日志

2018-10-13 21:14:57.510 27007-27007/app.bsmo.ismael034.com.bsmo D/miidf: 2
2018-10-13 21:14:57.511 27007-27007/app.bsmo.ismael034.com.bsmo D/miidf1: 2
2018-10-13 21:14:57.511 27007-27007/app.bsmo.ismael034.com.bsmo D/miidf1: 2
2018-10-13 21:14:57.511 27007-27007/app.bsmo.ismael034.com.bsmo D/miidf1: 3
2018-10-13 21:14:57.512 27007-27007/app.bsmo.ismael034.com.bsmo D/miidf1: 4

所以它的比较很好(我认为),但它显示在我的屏幕上,所以也许它没有显示,因为它没有传递给适配器,但是,如何?

java android arrays filter
2个回答
0
投票

您共享的案例显示metas是一个数组。

Meta_Asistance [] goals = gson.fromJson(message.toString(),Meta_Asistencia [] .Class);

你不能在数组上使用.size()方法,也不能通过getObject(i)获得数组对象。

以下是您需要在for循环中进行的两项更改:

  1. 用长度替换尺寸()
  2. 用[i]替换.getObject(i)

因此,您的最终代码应如下所示:

  for(int i=0;i<metas.length;i++){
               if(metas[i].miId != null && metas[i].miId == 2){
                  filteredArr.put(metas[i]);
  }

我希望这能解决你的问题。干杯!


0
投票

Metas是一个不在列表中的数组,你需要修改你的代码,如下所示

for(int i=0;i<metas.length;i++){
    if(metas[i].miId != null){
        filteredArr.put(metas[i]);
    }
    /*if(metas[i].getObject().miId != null){
        filteredArr.put(metas[i].getObject());
    }*/
}
© www.soinside.com 2019 - 2024. All rights reserved.