Ottenere 'Tentativo di ricall il metodo virtuale' java.lang.String java.lang.String.trim () 'su un riferimento di null object' anche quando il riferimento non è nullo

Sto usando FirebaseUI nella mia applicazione e FirebaseRecyclerAdapter per essere più specifico.

Sto recuperando i dati dal mio riferimento FirebaseDatabase utilizzando il metodo fornito qui .

  • android.util.Log quando pubblica - cosa posso fare / non fare
  • Screensaver personalizzato Android (o schermata di sonno)
  • Affrontare grandi bitmap (piegare una piccola bitmap per creare la carta da parati)
  • Schermo bianco prima dello splashscreen
  • Posso interrompere una chiamata in modo programmato in android?
  • Come trovare l'area di text (altezza / width) di TextView in modo programmato in android
  • Ecco il mio codice:

     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); } 

    Ecco come appare la struttura del database:

     -app -requestID -uniqueKey1 -key: value -key: value -cLat: value -uniqueKey2 -key: value -key: value -cLat: value 

    Come potete vedere nella struttura del database sopra, il riferimento ha due keys e tutti i dati vengono recuperati e visualizzati nel RecyclerView ma non appena una chiave viene rimossa dal riferimento, l'applicazione si blocca fornendo questo errore: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference sulla row specificata in precedenza.

    Il riferimento ha una key ancora e tutti gli stessi campi che sto recuperando sono anche in questa chiave. Allora perché faccio questo errore?

  • Android AudioRecord per Server su problemi di riproduzione UDP
  • get il valore in arrays nell'object json android
  • Come spingere gli aggiornamenti alle applicazioni preinstallate senza consentire l'installazione da fonti sconosciute
  • Come vendere un'applicazione a pagamento da un paese non supportto
  • Ricevitore di trasmissione Android Wifi non funziona come previsto
  • Re-firma di un Apk Android
  • One Solution collect form web for “Ottenere 'Tentativo di ricall il metodo virtuale' java.lang.String java.lang.String.trim () 'su un riferimento di null object' anche quando il riferimento non è nullo”

    se ciò causa l'errore:

     Map<String, String> map = (Map<String, String>) dataSnapshot.getValue(); String cLatS = map.get("cLat").trim(); 

    il motivo è molto probabile, che l'istantanea non abbia cLat bambino.

    dovresti controllare con .hasChild("cLat") – vedere DataSnapshot

    … o impedire il tentativo .trim(null) allo stesso modo:

     if(map.get("cLat") != null) { String cLatS = map.get("cLat").trim(); currentLtAU = Double.parseDouble(cLatS); } 

    mentre per questo tipo di applicazione è ansible verificare Firebase GeoFire .

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.