简体   繁体   中英

NullPointerException retrieving data from Firebase database

I'm trying to retrieve from the Firebase database 9 boolean variables and an int variable but every time i run my app it gets me a null pointer exeption

It's from an Android application, i set up a model page, i set the getter and setter method but it keeps retrieving null pointer exeption This is the model

public class ButtonInformation {
    private boolean Button1=false;
    private boolean Button2=false;
    private boolean Button3=false;
    private boolean Button4=false;
    private boolean Button5=false;
    private boolean Button6=false;
    private boolean Button7=false;
    private boolean Button8=false;
    private boolean Button9=false;
    private int ApeOmaggio=0;


    public ButtonInformation(){
    }

    public ButtonInformation(boolean button1, boolean button2, boolean button3, boolean button4, boolean button5, boolean button6, boolean button7, boolean button8, boolean button9, int apeOmaggio) {
        Button1 = button1;
        Button2 = button2;
        Button3 = button3;
        Button4 = button4;
        Button5 = button5;
        Button6 = button6;
        Button7 = button7;
        Button8 = button8;
        Button9 = button9;
        ApeOmaggio = apeOmaggio;
    }

    public boolean getButton1(){
        return Button1;
    }

    public void setButton1(boolean Button1){
        this.Button1 = Button1;
    }

    public boolean getButton2(){
        return Button2;
    }

    public void setButton2(boolean Button2){
        this.Button2 = Button2;
    }

    public boolean getButton3(){
        return Button3;
    }

    public void setButton3(boolean Button3){
        this.Button3 = Button3;
    }

    public boolean getButton4(){
        return Button4;
    }

    public void setButton4(boolean Button4){
        this.Button4 = Button4;
    }

    public boolean getButton5(){
        return Button5;
    }

    public void setButton5(boolean Button5){
        this.Button5 = Button5;
    }

    public boolean getButton6(){
        return Button6;
    }

    public void setButton6(boolean Button6){
        this.Button6 = Button6;
    }

    public boolean getButton7(){
        return Button7;
    }

    public void setButton7(boolean Button7){
        this.Button7 = Button7;
    }

    public boolean getButton8(){
        return Button8;
    }

    public void setButton8(boolean Button8){
        this.Button8 = Button8;
    }

    public boolean getButton9(){
        return Button9;
    }

    public void setButton9(boolean Button9){
        this.Button9 = Button9;
    }

    public int getApeOmaggio(){
        return ApeOmaggio;
    }

    public void setApeOmaggio(int ApeOmaggio){
        this.ApeOmaggio = ApeOmaggio;
    }
}

And this is the main activity

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.vavasimo.berrycoffeebardrinks.Model.ButtonInformation;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class ActivityClienti extends AppCompatActivity{
    private static final String CHAT_PREFS = "Chat prefs";
    private static final String NOME_KEY = "username";
    FirebaseAuth mAuth;
    private FirebaseDatabase mFirebaseDatabase;
    private DatabaseReference myRef;
    private String mail;
    private String mailNoSpace;
    TextView Utente;
    TextView ApeOmaggio;
    ImageView img1,img2,img3,img4,img5,img6,img7,img8,img9;
    ButtonInformation bInfo;
   FirebaseUser user;
           String utenteLog;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_clienti);
        Utente=findViewById(R.id.tvUtente);
        ApeOmaggio = findViewById(R.id.tvOmaggio);
        bInfo= new ButtonInformation();
        img1=findViewById(R.id.img1);
        img2=findViewById(R.id.img2);
        img3=findViewById(R.id.img3);
        img4=findViewById(R.id.img4);
        img5=findViewById(R.id.img5);
        img6=findViewById(R.id.img6);
        img7=findViewById(R.id.img7);
        img8=findViewById(R.id.img8);
        img9=findViewById(R.id.img9);
        mAuth=FirebaseAuth.getInstance();
        mFirebaseDatabase = FirebaseDatabase.getInstance();
        user = mAuth.getCurrentUser();
        utenteLog = user.getDisplayName();
        mail = user.getEmail();
        mailNoSpace=mail.replaceAll("\\.","");
        Utente.setText(utenteLog);
        myRef=mFirebaseDatabase.getReference(mailNoSpace);
        myRef.addValueEventListener(new ValueEventListener()
        {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                showData(dataSnapshot);
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }

    private void showData(DataSnapshot dataSnapshot) {
        for (DataSnapshot ds : dataSnapshot.getChildren()){
            bInfo = new ButtonInformation();
            try{
            bInfo.setButton1(ds.child(mailNoSpace).getValue(ButtonInformation.class).getButton1());
            bInfo.setButton2(ds.child(mailNoSpace).getValue(ButtonInformation.class).getButton2());
            bInfo.setButton3(ds.child(mailNoSpace).getValue(ButtonInformation.class).getButton3());
            bInfo.setButton4(ds.child(mailNoSpace).getValue(ButtonInformation.class).getButton4());
            bInfo.setButton5(ds.child(mailNoSpace).getValue(ButtonInformation.class).getButton5());
            bInfo.setButton6(ds.child(mailNoSpace).getValue(ButtonInformation.class).getButton6());
            bInfo.setButton7(ds.child(mailNoSpace).getValue(ButtonInformation.class).getButton7());
            bInfo.setButton8(ds.child(mailNoSpace).getValue(ButtonInformation.class).getButton8());
            bInfo.setButton9(ds.child(mailNoSpace).getValue(ButtonInformation.class).getButton9());
            bInfo.setApeOmaggio(ds.child(mailNoSpace).getValue(ButtonInformation.class).getApeOmaggio());}
            catch (NullPointerException e){
                Toast.makeText(this,"Aiuto",Toast.LENGTH_LONG).show();
            }

            if (bInfo.getButton1()==true){
                img1.setImageResource(R.drawable.berry_icon);
            }else{
                img1.setImageResource(R.drawable.radio_button);
            }
            if (bInfo.getButton2()==true){
                img2.setImageResource(R.drawable.berry_icon);
            }else{
                img2.setImageResource(R.drawable.radio_button);
            }
            if (bInfo.getButton3()==true){
                img3.setImageResource(R.drawable.berry_icon);
            }else{
                img3.setImageResource(R.drawable.radio_button);
            }
            if (bInfo.getButton4()==true){
                img4.setImageResource(R.drawable.berry_icon);
            }else{
                img4.setImageResource(R.drawable.radio_button);
            }
            if (bInfo.getButton5()==true){
                img5.setImageResource(R.drawable.berry_icon);
            }else{
                img5.setImageResource(R.drawable.radio_button);
            }
            if (bInfo.getButton6()==true){
                img6.setImageResource(R.drawable.berry_icon);
            }else{
                img6.setImageResource(R.drawable.radio_button);
            }
            if (bInfo.getButton7()==true){
                img7.setImageResource(R.drawable.berry_icon);
            }else{
                img7.setImageResource(R.drawable.radio_button);
            }
            if (bInfo.getButton8()==true){
                img8.setImageResource(R.drawable.berry_icon);
            }else{
                img8.setImageResource(R.drawable.radio_button);
            }
            if (bInfo.getButton9()==true){
                img9.setImageResource(R.drawable.berry_icon);
            }else{
                img9.setImageResource(R.drawable.radio_button);
            }
            ApeOmaggio.setText(Integer.toString(bInfo.getApeOmaggio()));

        }
    }







    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.layout_menu,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id==R.id.log_out_item){
            mAuth.signOut();
            Intent intent = new Intent (ActivityClienti.this, LogInActivity.class);
            finish();
            startActivity(intent);
        }
        return super.onOptionsItemSelected(item);
    }

    }

This is the error message that is shown

2019-02-21 11:39:24.689 16063-16120/com.example.vavasimo.berrycoffeebardrinks E/libc: Access denied finding property "vendor.debug.egl.profiler"
2019-02-21 11:39:26.041 16063-16063/com.example.vavasimo.berrycoffeebardrinks E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.vavasimo.berrycoffeebardrinks, PID: 16063
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.example.vavasimo.berrycoffeebardrinks.Model.ButtonInformation.getButton1()' on a null object reference
        at com.example.vavasimo.berrycoffeebardrinks.ActivityClienti.showData(ActivityClienti.java:101)
        at com.example.vavasimo.berrycoffeebardrinks.ActivityClienti.access$000(ActivityClienti.java:33)
        at com.example.vavasimo.berrycoffeebardrinks.ActivityClienti$1.onDataChange(ActivityClienti.java:87)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.6:75)
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.6:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.6:55)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6718)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

use an if not null condition before access firebase. or if you have change the child properties into your firebase project check the tree.

You can directly map your model class with firebase response data. You will not have to set each data in model class manually.

If your data will retrieve successfully from the firebase, then this code will work, try below code.

 @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_clienti); Utente=findViewById(R.id.tvUtente); ApeOmaggio = findViewById(R.id.tvOmaggio); bInfo= new ButtonInformation(); img1=findViewById(R.id.img1); img2=findViewById(R.id.img2); img3=findViewById(R.id.img3); img4=findViewById(R.id.img4); img5=findViewById(R.id.img5); img6=findViewById(R.id.img6); img7=findViewById(R.id.img7); img8=findViewById(R.id.img8); img9=findViewById(R.id.img9); mAuth=FirebaseAuth.getInstance(); mFirebaseDatabase = FirebaseDatabase.getInstance(); user = mAuth.getCurrentUser(); utenteLog = user.getDisplayName(); mail = user.getEmail(); mailNoSpace=mail.replaceAll("\\\\.",""); Utente.setText(utenteLog); myRef=mFirebaseDatabase.getReference(mailNoSpace); myRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { ButtonInformation buttonInformation = dataSnapshot.getValue(ButtonInformation.class); showData(buttonInformation); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } private void showData(ButtonInformation buttonInformation) { if (buttonInformation.getButton1()==true){ img1.setImageResource(R.drawable.berry_icon); }else{ img1.setImageResource(R.drawable.radio_button); } if (buttonInformation.getButton2()==true){ img2.setImageResource(R.drawable.berry_icon); }else{ img2.setImageResource(R.drawable.radio_button); } if (buttonInformation.getButton3()==true){ img3.setImageResource(R.drawable.berry_icon); }else{ img3.setImageResource(R.drawable.radio_button); } if (buttonInformation.getButton4()==true){ img4.setImageResource(R.drawable.berry_icon); }else{ img4.setImageResource(R.drawable.radio_button); } if (buttonInformation.getButton5()==true){ img5.setImageResource(R.drawable.berry_icon); }else{ img5.setImageResource(R.drawable.radio_button); } if (buttonInformation.getButton6()==true){ img6.setImageResource(R.drawable.berry_icon); }else{ img6.setImageResource(R.drawable.radio_button); } if (buttonInformation.getButton7()==true){ img7.setImageResource(R.drawable.berry_icon); }else{ img7.setImageResource(R.drawable.radio_button); } if (buttonInformation.getButton8()==true){ img8.setImageResource(R.drawable.berry_icon); }else{ img8.setImageResource(R.drawable.radio_button); } if (buttonInformation.getButton9()==true){ img9.setImageResource(R.drawable.berry_icon); }else{ img9.setImageResource(R.drawable.radio_button); } ApeOmaggio.setText(Integer.toString(bInfo.getApeOmaggio())); } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM