代码之家  ›  专栏  ›  技术社区  ›  Alexander

方法调用“toString”可能会产生“java.lang.NullPointerException”错误

  •  -1
  • Alexander  · 技术社区  · 7 年前

    我犯了这个错误 Method invocation 'toString' may produce 'java.lang.NullPointerException

    String notat = dataSnapshot1.child("notat").getValue().toString();

    我做错什么了吗?

    这是我的日志:

    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
                                                                           at com.example.server.almu.Notater$2$1.onDataChange(Notater.java:145)
                                                                           at com.google.android.gms.internal.to.zza(Unknown Source:13)
                                                                           at com.google.android.gms.internal.vj.zzHX(Unknown Source:2)
                                                                           at com.google.android.gms.internal.vp.run(Unknown Source:71)
                                                                           at android.os.Handler.handleCallback(Handler.java:789)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                           at android.os.Looper.loop(Looper.java:164)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:6944)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
    

    主要活动:

    private void loaddata(){
        Query query = databaseNotater.orderByValue();
        final FirebaseRecyclerAdapter<Notat, NoteViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Notat, NoteViewHolder>(
    
                Notat.class,
                R.layout.single_note_layout,
                NoteViewHolder.class,
                query
        ) {
            @Override
            protected void populateViewHolder(final NoteViewHolder viewHolder, Notat model, int position) {
                final String notatId = getRef(position).getKey();
    
                databaseNotater.child(notatId).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot1) {
                        String notat = dataSnapshot1.child("notat").getValue().toString();
                        viewHolder.setNoteTitle(notat);
                    }
    
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
    
                    }
                });
    
            }
        };
    
        mNoteslist.setAdapter(firebaseRecyclerAdapter);
    
        firebaseRecyclerAdapter.notifyDataSetChanged();
    }
    

    删除方法代码:

     private void testendredialog(final String jobbnavn, final String jobbId) {
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
        LayoutInflater inflater = getLayoutInflater();
        final View dialogView = inflater.inflate(R.layout.test_slettdialog, null);
    
        dialogBuilder.setView(dialogView);
    
        final ImageView ivslettjobb = (ImageView) dialogView.findViewById(R.id.ivslett1);
    
    
        dialogBuilder.setTitle(jobbnavn);
    
        final AlertDialog alertDialog = dialogBuilder.create();
        alertDialog.show();
    
        ivslettjobb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                deleteJobb(jobbId);
                alertDialog.dismiss();
            }
    
        });
    }
    
    private void deleteJobb(String id) {
    
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Jobb").child(id);
        DatabaseReference databaseReference1= FirebaseDatabase.getInstance().getReference("Notater").child(id);
        DatabaseReference databaseReference2= FirebaseDatabase.getInstance().getReference("Oppgaver").child(id);
    
        databaseReference2.removeValue();
        databaseReference1.removeValue();
        databaseReference.removeValue();
    
        Toast.makeText(this, "Ansatt slettet", Toast.LENGTH_LONG).show();
    
        final listJobber adapter = new listJobber(Jobbliste.this, listjobb);
        listjobber.setAdapter(adapter);
    
        adapter.notifyDataSetChanged();
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   OneCricketeer Gabriele Mariotti    7 年前

    您可以像这样绕过这个问题,但是您需要进行进一步的调试,以了解为什么值返回为 null

    Object notat = dataSnapshot1.child("notat").getValue();
    viewHolder.setNoteTitle(String.valueOf(notat));