android - 从数据库中过滤 ArrayList
问题描述
我想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
,我收到此错误
尝试从空对象 >reference 上的字段“android.view.View >android.support.v7.widget.RecyclerView$ViewHolder.itemView”读取
它的另一种回归可能性?
创建数组之前:
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);
解决方案
There should never be a null value returned in place of view. Make your if conditions on the adapter such that it handles every condition and returns a view for that condition. It should never return null in place of view otherwise the app will crash as the adapter needs some kind of view to show its contents.
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;
}
The else part should send a view. When it sends null the adapter will crash.
So what you should do is that you should return a view for every if condition such that if miId is 2, you are returning view of item_list_asistencia and for other values it should return a different view but not null
1.Make a seperate Array named filteredArr;
2.Before sending to adapter, forloop the array metas
. In the forloop, if Meta_Asistencia objeto1.miId
is null, don't put the object into filteredArr else put into filteredArr
So loosely
for(int i=0;i<metas.size();i++){
if(metas.getObject(i).miId != null){
filteredArr.put(metas.getObject(i));
}
}
No object with miId == null is stored in the filtered array.
3.Pass filteredArr into the adapter.
推荐阅读
- python - 使用来自 Google Cloud Storage 的数据在 Google Compute Engine 上训练 Resnet 时的可变性能
- git - Git远程推送错误![远程拒绝] master -> master(无法将工作树更新为新 HEAD)
- python - 如何将 python 库作为 zip 文件导入?
- ios - Xcode 打开项目耗时太长
- python - Boto3 AWS KMS 加密解密文件
- applescript - 如何防止或延长 AppleEvent 或 SpeechRecognitionServer 超时?
- ffmpeg - 压缩大部分包含静音的 mp3
- javascript - 为什么 Javascript 不能在我的三星互联网浏览器上运行?使用三星 Galaxy S7
- ruby - ruby Mustache lambda 可以接收插值吗?
- c# - Instagram 获取电子邮件(2019 修复?)