gpt4 book ai didi

android - 从数据库中过滤 ArrayList

转载 作者:行者123 更新时间:2023-11-29 07:28:16 25 4
gpt4 key购买 nike

我想从数据库中过滤一个ArrayList。这是我过滤数组的代码:

if (miId == 2) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_list_asistencia, viewGroup, false);

return new MetaViewHolder(v, this);
} else {
return null;
}

它运行良好,但问题是当 miId != 2 时,它执行 null 并且我得到这个错误

Attempt to read from field 'android.view.View >android.support.v7.widget.RecyclerView$ViewHolder.itemView' on a null object >reference

这是另一种返回的可能性吗?

在创建数组之前:

public void cargarAdaptador() {

// Petición GET

Log.d("DIATX", String.valueOf(11));
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
adapter = new MetaAdapter_Asistencia(Arrays.asList(metas), getActivity());
// Setear adaptador a la lista
lista.setAdapter(adapter);

progressBar_first.setVisibility(View.INVISIBLE);

我的新过滤器代码:

 // 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);

最佳答案

绝不应该返回空值来代替 View 。在适配器上设置 if 条件,使其处理每个条件并返回该条件的 View 。它永远不应返回 null 代替 View ,否则应用程序将崩溃,因为适配器需要某种 View 来显示其内容

if (miId == 2) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_list_asistencia, viewGroup, false);

return new MetaViewHolder(v, this);
} else {
return null;
}

else 部分应该发送一个 View 。当它发送 null 时,适配器将崩溃。

所以你应该做的是,你应该为每个 if 条件返回一个 View ,这样如果 miId 为 2,你将返回 item_list_asistencia 的 View ,对于其他值,它应该返回一个不同的 View 但不为空

1.制作一个单独的数组,命名为filteredArr;

2.在发送到适配器之前,forloop 数组metas。在 forloop 中,如果 Meta_Asistencia objeto1.miId 为 null,则不将对象放入 filteredArr,否则放入 filteredArr

很松散

for(int i=0;i<metas.size();i++){
if(metas.getObject(i).miId != null){
filteredArr.put(metas.getObject(i));
}
}

过滤后的数组中没有存储 miId == null 的对象。

3.将 filteredArr 传递给适配器。

关于android - 从数据库中过滤 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52787589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com