-1

I am getting a null pointer exception, while I am trying to add data into realtime database in firebase

package com.example.ecommerce;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.*;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
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;

import java.util.HashMap;

public class register extends AppCompatActivity {

  EditText inputname, password, Phone;
  Button createaccount;
  ProgressDialog loadingbar;
  FirebaseDatabase database;
  DatabaseReference ref;
  User user;

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

    inputname = findViewById(R.id.username);
    password = findViewById(R.id.reg_password);
    Phone = findViewById(R.id.reg_phone_number);
    createaccount = findViewById(R.id.create_account);
    // loadingbar=new ProgressDialog(this);
    ref = database.getReference("User");
    user = new User();

  }

  public void getValues() {
    user.setName(inputname.getText().toString());
    user.setPhone(Phone.getText().toString());
    user.setPassword(password.getText().toString());
  }
  public void btn(View view) {
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
      public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        getValues();
        ref.child("user02").setValue(user);
        Toast.makeText(register.this, "Data Inserted", Toast.LENGTH_LONG).show();
      }

      @Override
      public void onCancelled(@NonNull DatabaseError databaseError) {

      }
    });
  }
}

User class :

package com.example.ecommerce;

public class User {

    private String Name;
    private String Phone;
    private String Password;

    public User() {

    }

    public User(String name, String phone, String password) {
        Name = name;
        Phone = phone;
        Password = password;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getPhone() {
        return Phone;
    }

    public void setPhone(String phone) {
        Phone = phone;
    }

    public String getPassword() {
        return Password;
    }

    public void setPassword(String password) {
        Password = password;
    }
}

log:

2019-07-22 12:02:52.086 15273-15273/com.example.ecommerce E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.ecommerce, PID: 15273
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ecommerce/com.example.ecommerce.register}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.database.DatabaseReference com.google.firebase.database.FirebaseDatabase.getReference(java.lang.String)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3121)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3257)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:81)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1935)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7116)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:925)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.database.DatabaseReference com.google.firebase.database.FirebaseDatabase.getReference(java.lang.String)' on a null object reference
        at com.example.ecommerce.register.onCreate(register.java:44)
        at android.app.Activity.performCreate(Activity.java:7698)
        at android.app.Activity.performCreate(Activity.java:7687)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3096)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3257) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:81) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1935) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7116) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:925)
barbsan
  • 3,418
  • 11
  • 21
  • 28
simran kaur
  • 113
  • 1
  • 1
  • 5
  • Possible duplicate of [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – André Kool Jul 22 '19 at 08:57

3 Answers3

0

database is null it doesnt reference anything in the heap, you need to initialize it by doing:

FirebaseDatabase database = FirebaseDatabase.getInstance();

Then you can do:

DatabaseReference ref = database.getReference("User");
Peter Haddad
  • 78,874
  • 25
  • 140
  • 134
  • thanks a lot :) but i am getting another issue, on clicking create account button does nothing, no data is being saved in Firebase and not getting the toast "Data inserted" – simran kaur Jul 22 '19 at 07:02
0

Seems like you forgot to initialise

FirebaseDatabase database = FirebaseDatabase.getInstance();

Initialise your database , before initialising ref (DatabaseReference).

In order to write to your root "user" ,

    User user =new  User(
        Name = etName.text.toString(),
        Phone = etPhone.text.toString(),
        password = etPassword.text.toString()
    )
    database.child(userId).setValue(user)
Mini Chip
  • 949
  • 10
  • 12
  • thanks a lot :) but i am getting another issue, on clicking create account button does nothing, no data is being saved in Firebase and not getting the toast "Data inserted" – simran kaur Jul 22 '19 at 07:04
0

You need to create a database object in your oncreate method. Due to your database object you getting null pointer exception. Your code of oncreate method should be like.

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

  inputname = findViewById(R.id.username);
  password = findViewById(R.id.reg_password);
  Phone = findViewById(R.id.reg_phone_number);
  createaccount = findViewById(R.id.create_account);
  // loadingbar=new ProgressDialog(this);
   database = FirebaseDatabase.getInstance();
   ref = database.getReference("User");
  user = new User();

}
Sanjay Bhalani
  • 2,424
  • 18
  • 44