【问题标题】:Attempt to invoke virtual method 'void com.basicprofileapp.dataholder.setUsername(java.lang.String)'on a null object refrence [duplicate]尝试在空对象引用上调用虚拟方法“void com.basicprofileapp.dataholder.setUsername(java.lang.String)”[重复]
【发布时间】:2020-07-26 07:29:51
【问题描述】:

我正在创建一个基本应用程序,它接受输入并将其存储在具有自动递增功能的 firebase 数据库中,但每次出现空指针异常时它都会崩溃。

我认为我的数据持有者 java 文件中存在一些问题,但我无法修复它。

我已尝试更改 dataholder 文件中的参数。我已检查我的 android 清单文件中的 firebase 服务。

这是我的数据持有者 java 文件

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;
    }
}

和 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();

            }
        });
    }

}

【问题讨论】:

    标签: java android firebase nullpointerexception


    【解决方案1】:

    您的字段dataholder obj 从未设置,因此当您在OnClickListener 中为称为“登录”的Button 访问它时它为空。

    您需要先将obj 分配给一个实际值,然后才能访问getter/setter,例如obj = new dataholder(...)

    【讨论】:

    • 很高兴听到@tanujabhatnagar!不要忘记将此标记为答案。 ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2018-05-22
    • 2021-12-29
    • 2020-02-22
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    相关资源
    最近更新 更多