我想用数据库中的值过滤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
所以它的比较很好(我认为),但它显示在我的屏幕上,所以也许它没有显示,因为它没有传递给适配器,但是,如何?
您共享的案例显示metas是一个数组。
Meta_Asistance [] goals = gson.fromJson(message.toString(),Meta_Asistencia [] .Class);
你不能在数组上使用.size()方法,也不能通过getObject(i)获得数组对象。
以下是您需要在for循环中进行的两项更改:
因此,您的最终代码应如下所示:
for(int i=0;i<metas.length;i++){
if(metas[i].miId != null && metas[i].miId == 2){
filteredArr.put(metas[i]);
}
我希望这能解决你的问题。干杯!
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());
}*/
}