Вызов метода 'toString' может вызвать ошибку 'java.lang.NullPointerException " - PullRequest
0 голосов
/ 26 ноября 2018

Я получаю эту ошибку Method invocation 'toString' may produce 'java.lang.NullPointerException, когда я пытаюсь удалить данные из firebase, это также приводит к сбою моего приложения.

Эта строка создает проблемы:

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

Есть ли что-то, что я сделал неправильно?

Вот мой logcat:

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)

MainActivty:

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 Ответ

0 голосов
/ 26 ноября 2018

Вы можете обойти проблему следующим образом, но вам нужно будет выполнить дальнейшую отладку, чтобы узнать, почему значение возвращается как null

Object notat = dataSnapshot1.child("notat").getValue();
viewHolder.setNoteTitle(String.valueOf(notat));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...