私はを公開しています。私はこの仕事を成功裏に完了しています。ここで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
を再度取ります今度はデータの一部、具体的には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に表示しますか?