Я использую FirebaseUI
«s FirebaseRecyclerAdapter
в моем приложении, чтобы загрузить некоторые данные из ссылки FirebaseDatabase и показать его в RecyclerView
. Я успешно завершаю эту задачу.FirebaseRecyclerAdapter в populateViewHolder() вызывались перед ключом, имеющий определенные значения получает полностью удален, таким образом, давая NullPointerException
Вот мой код:
private void attachRecyclerViewAdapter() {
Query lastFifty = mDatabase.child(rID).limitToFirst(50);
mRecyclerViewAdapter = new FirebaseRecyclerAdapter<AModelClass, AModelClass.ViewHolder>(
AModelClass.class, R.layout.a_player_layout, APlayersModelClass.ViewHolder.class, lastFifty) {
@Override
protected void populateViewHolder(AModelClass.ViewHolder viewHolder, AsModelClass model, int position) {
String key = this.getRef(position).getKey();
aReference.child(requestID).child(key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
Map<String, String> map = (Map<String, String>) dataSnapshot.getValue();
pA = map.get("pName");
uA = map.get("pUrl");
// error on line below
String cLatS = map.get("cLat").trim();
currentLtAU = Double.parseDouble(cLatS);
String cLngS = map.get("cLng").trim();
currentLnAU = Double.parseDouble(cLngS);
viewHolder.setPName(pA);
viewHolder.setPUrl(uA);
viewHolder.setCurrentLatAU(String.valueOf(currentLtAU));
viewHolder.setCurrentLngAU(String.valueOf(currentLnAU));
} else {
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "Some error occurred. Please retry!", Snackbar.LENGTH_SHORT);
snackbar.show();
onBackPressed();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
};
aList.setAdapter(mRecyclerViewAdapter);
}
Вот представление структуры баз данных:
-app
-requestID
-uniqueKey1
-key: value
-key: value
-cLat: value
-uniqueKey2
-key: value
-key: value
-cLat: value
Проблема заключается в том, что как только я удалить uniqueKey1
из базы данных, код внутри метода populateViewHolder()
является и данные под uniqueKey1
не удаляются полностью и, следовательно, aReference.child(requestID).child(key)
снова принимает uniqueKey1
b на этот раз некоторые данные, в частности cLat
, удаляются отсюда, и, таким образом, сбой приложения приводит к ошибке java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference
в строке, указанной в коде.
То, что я хочу знать, как я могу позволить код внутри populateViewHolder()
называется только тогда, когда uniqueKey1
вместе с данными в соответствии с ним полностью удаляется, а затем aReference.child(requestID).child(key)
принимает только uniqueKey2
(оставшийся ключ (ы)), как параметр для повторной загрузки данных и отображения в recyclerview?