Я использую FirebaseUI
в своем приложении и FirebaseRecyclerAdapter
, чтобы быть более конкретным.
Я извлекаю данные из своей ссылки FirebaseDatabase
, используя метод, указанный здесь.
Вот мой код:
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
Как вы можете видеть в приведенной выше структуре базы данных, ссылка имеет 2 keys
, и все данные извлекаются и отображаются в RecyclerView
, но как только один ключ удаляется из ссылки, приложение вылетает, выдавая эту ошибку: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference
в указанной строке выше.
Ссылка имеет один key
кадр, и все те же поля, которые я извлекаю, также находятся в этом ключе. Тогда почему я получаю эту ошибку?
AModelClass
? - person OneCricketeer   schedule 29.01.2017AModelClass
? Пожалуйста, дай мне знать. - person Hammad Nasir   schedule 29.01.2017dataSnapshot.getValue
принимает параметр класса, ИЛИ вы можете использовать этотAsModelClass model
параметр, я думаю - person OneCricketeer   schedule 29.01.2017populateViewHolder
. У тебя там модель. Почему бы не использовать его? - person OneCricketeer   schedule 29.01.2017model.getcLat()
?? - person OneCricketeer   schedule 29.01.2017populateViewHolder
вызывается с частично удаленным значением, и, таким образом, это ошибка. Итак, как я могу полностью удалить его до того, как будет вызван код подpopulateViewHolder
? и он должен вызываться только с оставшимисяkey
(ами). - person Hammad Nasir   schedule 29.01.2017new ValueEventListener
внутрь метода, который существует только для заполнения держателя представления предоставленным параметромmodel
, который является синхронным методом. - person OneCricketeer   schedule 29.01.2017ValueEventListener
до того, как возникла проблема с методомpopulateViewHolder()
: stackoverflow.com /q/41910271/6144372 затем я провел небольшое исследование и нашел ответ: stackoverflow.com/a/36236657/6144372 которому я следую сейчас. - person Hammad Nasir   schedule 30.01.2017