-2

We want to send an object DetailRestaurant to our Database and we have an java.lang.reflect.InvocationTargetException

public class DataActivity extends AppCompatActivity {

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef;
    private EditText nameUser;
    private Spinner rolUser;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_data);

        myRef = database.getReference("").child("users");

        nameUser = (EditText) findViewById(R.id.nameUser);
        rolUser = (Spinner) findViewById(R.id.rolUser);
        final String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();

        Button map = (Button) findViewById(R.id.buttonUser);
        map.setOnClickListener(new View.OnClickListener() {
            @Override

            public void onClick(View view) {
                writeNewUser(nameUser.getText().toString(),rolUser.getSelectedItem().toString());
                Log.wtf("jelp", nameUser.getText().toString());
                Log.wtf("jelp2", userId);
                writeNewRestaurant(nameUser.getText().toString(), userId);
                if (rolUser.getSelectedItem().toString().equals("Restaurant")){
                    Intent Restaurant = new Intent(DataActivity.this, MainRestaurantActivity.class);
                    startActivity(Restaurant);
                    finish();
                }
                else{
                    Intent Client= new Intent(DataActivity.this, MainClientActivity.class);
                    startActivity(Client);
                    finish();
                }
            }
        });
    }
    private void writeNewUser(String name, String rol) {
        String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
        DetailUser user = new DetailUser(name, rol);
        myRef = database.getReference("");
        myRef.child("users").child("data").child(userId).setValue(user);
    }
    private void writeNewRestaurant(String name, String uid){
        String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
        DetailRestaurant user = new DetailRestaurant(name, uid);
        myRef = database.getReference("");
        myRef.child("users").child("restaurant").child(userId).setValue(user);
    }
}

public class DetailRestaurant implements Serializable {

    private String name;
    private String uid;
    private String ImageRestaurant;
    private HashMap<String, DetailPlate> plates;

    public DetailRestaurant(){

    }

    public DetailRestaurant(String ImageRestaurant){
        this.ImageRestaurant = ImageRestaurant;
    }

    public DetailRestaurant(String name, String uid) {
        this.name = name;
        this.uid = uid;
    }

    public DetailRestaurant(String name, String uid, String ImageRestaurant, HashMap<String, DetailPlate> plates) {
        this.name = name;
        this.uid=uid;
        this.ImageRestaurant = ImageRestaurant;
        this.plates = plates;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUid() {
        return uid;
    }
    public void setUid(String uid) {
        this.uid = uid;
    }
    public String getImageRestaurant() {
        return ImageRestaurant;
    }
    public void setImageRestaurant(String imageRestaurant) {
        ImageRestaurant = imageRestaurant;
    }
    public void setPlates(HashMap<String, DetailPlate> plates) {
        this.plates = plates;
    }
    public HashMap<String, DetailPlate> getPlates(){ return plates; }
    public ArrayList<DetailPlate> getPlatesList() {
        return new ArrayList<>(this.plates.values());
    }
    @Override
    public String toString() {
        return this.getName();
    }

}

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.fernandalopezcardenas.uneatfinal, PID: 23911 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at com.google.android.gms.internal.zzbtg$zza.zzaH(Unknown Source) at com.google.android.gms.internal.zzbtg.zzaz(Unknown Source) at com.google.android.gms.internal.zzbtg.zzay(Unknown Source) at com.google.firebase.database.DatabaseReference.zza(Unknown Source) at com.google.firebase.database.DatabaseReference.setValue(Unknown Source) at com.example.fernandalopezcardenas.uneatfinal.Signup.DataActivity.writeNewRestaurant(DataActivity.java:71) at com.example.fernandalopezcardenas.uneatfinal.Signup.DataActivity.access$300(DataActivity.java:21) at com.example.fernandalopezcardenas.uneatfinal.Signup.DataActivity$1.onClick(DataActivity.java:47) at android.view.View.performClick(View.java:5640) at android.view.View$PerformClick.run(View.java:22455) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6165) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at com.google.android.gms.internal.zzbtg$zza.zzaH(Unknown Source)  at com.google.android.gms.internal.zzbtg.zzaz(Unknown Source)  at com.google.android.gms.internal.zzbtg.zzay(Unknown Source)  at com.google.firebase.database.DatabaseReference.zza(Unknown Source)  at com.google.firebase.database.DatabaseReference.setValue(Unknown Source)  at com.example.fernandalopezcardenas.uneatfinal.Signup.DataActivity.writeNewRestaurant(DataActivity.java:71)  at com.example.fernandalopezcardenas.uneatfinal.Signup.DataActivity.access$300(DataActivity.java:21)  at com.example.fernandalopezcardenas.uneatfinal.Signup.DataActivity$1.onClick(DataActivity.java:47)  at android.view.View.performClick(View.java:5640)  at android.view.View$PerformClick.run(View.java:22455)  at android.os.Handler.handleCallback(Handler.java:751)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6165)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Collection java.util.HashMap.values()' on a null object reference at com.example.fernandalopezcardenas.uneatfinal.Detail.DetailRestaurant.getPlatesList(DetailRestaurant.java:60)

Zoe
  • 27,060
  • 21
  • 118
  • 148
Jessica Sohr
  • 1
  • 1
  • 5

1 Answers1

3

HashMap which you are trying to save in database is not initialized so you get NPE when it is serialized.

Alex Mamo
  • 130,605
  • 17
  • 163
  • 193
Karol Kulbaka
  • 1,136
  • 11
  • 21