0

I was creating a basic application that takes input and stores it in a firebase database with auto incrementing but it crashes everytime giving a nullpointer exception.

I think there is some problem in my dataholder java file but I can't fix it.

I've tried changing arguments in dataholder file.i have checked my android manifest file for firebase services.

Here's my dataholder java file

public class dataholder {

    String username,password1;

    public dataholder(String username, String password1) {
        this.username = username;
        this.password1 = password1;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword1() {
        return password1;
    }

    public void setPassword1(String password1) {
        this.password1 = password1;
    }
}

and MainActivity

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

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

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 MainActivity extends AppCompatActivity {

    EditText name;
    EditText password;
    Button login;


    DatabaseReference reff;
    dataholder obj;

    long maxid = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name = (EditText) findViewById(R.id.etusername);
        password = (EditText) findViewById(R.id.etpassword);
        login = (Button) findViewById(R.id.Login);

        reff = FirebaseDatabase.getInstance().getReference().child("dataholder");
        reff.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists())
                    maxid = (dataSnapshot.getChildrenCount());
            }

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

            }
        });

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                obj.setUsername(name.getText().toString().trim());
                obj.setPassword1(password.getText().toString().trim());

                reff.child(String.valueOf(maxid + 1)).setValue("obj");
                Toast.makeText(getApplicationContext(), "Data inserted ", Toast.LENGTH_SHORT).show();

            }
        });
    }

}

1 Answers1

1

Your field dataholder obj is never set, so it be null when you to access it in the OnClickListener for the Button called "login".

You'll need to assign obj to an actual value before you can access the getters/setters, such as obj = new dataholder(...).

karllindmark
  • 6,031
  • 1
  • 26
  • 41