0

Я использую 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?

ответ

0

Ну, я думаю, что я понял путь.

Просто поместите некоторые условия в код.

Вот обновленный код:

if (dataSnapshot.getValue() != null) { 

     if (dataSnapshot.hasChild("pName") && dataSnapshot.hasChild("pUrl") && dataSnapshot.hasChild("cLat") && dataSnapshot.hasChild("cLng")) { 

       Map<String, String> map = (Map<String, String>) dataSnapshot.getValue(); 
       pA = map.get("pName"); 
       uA = map.get("pUrl"); 
       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)); 

      } 
    } 

и теперь все отлично работает!

 Смежные вопросы

  • Нет связанных вопросов^_^