Java Firebase Android错误:Can';t为参数传递null';路径字符串';在儿童时期
当我从注册表单在firebase上创建新用户时,出现以下错误: java.lang.NullPointerException:无法为child()中的参数“pathString”传递null 我在谷歌和YouTube上搜索了这个错误,但没有找到适合我的程序的内容 以下是我在SignUpActivity.java上的部分代码:Java Firebase Android错误:Can';t为参数传递null';路径字符串';在儿童时期,java,android,firebase,firebase-realtime-database,mobile,Java,Android,Firebase,Firebase Realtime Database,Mobile,当我从注册表单在firebase上创建新用户时,出现以下错误: java.lang.NullPointerException:无法为child()中的参数“pathString”传递null 我在谷歌和YouTube上搜索了这个错误,但没有找到适合我的程序的内容 以下是我在SignUpActivity.java上的部分代码: final EditText email = findViewById(R.id.email_address); final EditText displa
final EditText email = findViewById(R.id.email_address);
final EditText display_name = findViewById(R.id.display_name);
final EditText password = findViewById(R.id.pass_sign_up);
final EditText comfirm_pass = findViewById(R.id.comfirm_pass);
final Button submit = findViewById(R.id.submit_btn_signup);
final TextView signin = findViewById(R.id.textView8);
final FirebaseAuth mAuth = FirebaseAuth.getInstance();
final String[] error = new String[1];
final ProgressBar loading_icon = findViewById(R.id.progressBar2);
// hide loading icon \\
loading_icon.setVisibility(View.GONE);
signin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SignupActivity.this,MainActivity.class);
startActivity(intent);
}
});
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loading_icon.setVisibility(View.VISIBLE);
String email_input = email.getText().toString();
String display_name_input = display_name.getText().toString();
String password_input = password.getText().toString();
String comfirm_pass_input = comfirm_pass.getText().toString();
if (email_input.isEmpty() || display_name_input.isEmpty() || password_input.isEmpty() || comfirm_pass_input.isEmpty()){
error[0] = "Please fill all the values and try again";
Toast.makeText(SignupActivity.this, error[0], Toast.LENGTH_LONG).show();
loading_icon.setVisibility(View.GONE);
}else{
if (!password_input.equals(comfirm_pass_input)){
error[0] = "passwords do not match";
Toast.makeText(SignupActivity.this, error[0], Toast.LENGTH_LONG).show();
loading_icon.setVisibility(View.GONE);
}else{
mAuth.createUserWithEmailAndPassword(email_input,password_input).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull @NotNull Task<AuthResult> task) {
if (task.isSuccessful()){
finish();
// set display name for user \\
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName(display_name_input).build();
user.updateProfile(profileUpdates);
DatabaseReference mRef = FirebaseDatabase.getInstance().getReference();
mRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(@NotNull DataSnapshot dataSnapshot){
// Get the max_user_id to set the main user id and create the user on Firebase real-time DB \\
String maxUserId = dataSnapshot.child("max_user_id").getValue().toString();
int maxUserIdToInt = Integer.parseInt(maxUserId);
int userId = maxUserIdToInt+1;
newUserId = String.valueOf(userId);
mRef.child("users").child(newUserId).child("name").setValue(display_name_input);
}
@Override
public void onCancelled(@NotNull DatabaseError databaseError){
Toast.makeText(SignupActivity.this,"error: " + databaseError, Toast.LENGTH_LONG).show();
}
});
mRef.child("users").child(newUserId);
Intent intent = new Intent(SignupActivity.this,HomeActivity.class);
startActivity(intent);
}else{
loading_icon.setVisibility(View.GONE);
error[0] = "failed to sign up, the email address aleready exist or the password lenght is lower than 6 characters";
Toast.makeText(SignupActivity.this, error[0], Toast.LENGTH_LONG).show();
}
}
});
}
}
}
});
}
final EditText email=findviewbyd(R.id.email\u地址);
最终编辑文本显示\u名称=findViewById(R.id.display\u名称);
最终编辑文本密码=findViewById(R.id.pass\u sign up);
最终编辑文本comfirm_pass=findViewById(R.id.comfirm_pass);
最终按钮提交=findviewbyd(R.id.submit\u btn\u注册);
最终文本视图符号=findViewById(R.id.textView8);
final FirebaseAuth mAuth=FirebaseAuth.getInstance();
最终字符串[]错误=新字符串[1];
最终进度条加载图标=findViewById(R.id.progressBar2);
//隐藏加载图标\\
加载图标。设置可见性(View.GONE);
signin.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(SignupActivity.this,MainActivity.class);
星触觉(意向);
}
});
submit.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
加载图标设置可见性(View.VISIBLE);
字符串email_input=email.getText().toString();
String display_name_input=display_name.getText().toString();
字符串password_input=password.getText().toString();
字符串comfirm_pass_input=comfirm_pass.getText().toString();
if(email_input.isEmpty()| display_name_input.isEmpty()| pass_input.isEmpty()|确认_pass_input.isEmpty()){
错误[0]=“请填写所有值并重试”;
Toast.makeText(SignupActivity.this,错误[0],Toast.LENGTH_LONG.show();
加载图标。设置可见性(View.GONE);
}否则{
如果(!password_input.equals(comfirm_pass_input)){
错误[0]=“密码不匹配”;
Toast.makeText(SignupActivity.this,错误[0],Toast.LENGTH_LONG.show();
加载图标。设置可见性(View.GONE);
}否则{
mAuth.createUserWithEmailAndPassword(电子邮件输入,密码输入)。addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull@NotNull任务){
if(task.issusccessful()){
完成();
//设置用户的显示名称\\
FirebaseUser=FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates=新建UserProfileChangeRequest.Builder()
.setDisplayName(显示名称输入).build();
user.updateProfile(profileUpdates);
DatabaseReference mRef=FirebaseDatabase.getInstance().getReference();
mRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(@NotNull DataSnapshot DataSnapshot){
//获取max_user_id以设置主用户id并在Firebase实时数据库上创建用户\\
字符串maxUserId=dataSnapshot.child(“max_user_id”).getValue().toString();
int-maxUserIdToInt=Integer.parseInt(maxUserId);
int userId=maxUserIdToInt+1;
newUserId=String.valueOf(userId);
mRef.child(“用户”).child(newUserId).child(“名称”).setValue(显示名称\输入);
}
@凌驾
已取消的公共void(@NotNull DatabaseError DatabaseError){
makeText(SignupActivity.this,“error:+databaseError,Toast.LENGTH_LONG).show();
}
});
mRef.child(“用户”).child(newUserId);
意向意向=新意向(SignupActivity.this、HomeActivity.class);
星触觉(意向);
}否则{
加载图标。设置可见性(View.GONE);
错误[0]=“注册失败,电子邮件地址存在或密码长度小于6个字符”;
Toast.makeText(SignupActivity.this,错误[0],Toast.LENGTH_LONG.show();
}
}
});
}
}
}
});
}
}
注意:我是firebase android应用程序的初学者。另外,我今天在这里创建了我的帐户,stackoverflow非常酷而且非常有用当您调用child()
时,您需要传递一个非空字符串作为参数。在您的例子中,newUserId
由于某种原因是空的。因此,调用child(newUserId)
,Firebase会抛出一个异常
前进的方向应该是检查您使用path
max\u user\u id
访问孩子的方式是否正确。您可以在该位置保留一个断点,然后遍历dataSnapshot
的结构以获得正确的路径。问题在该片段的最后一行:
DatabaseReference mRef = FirebaseDatabase.getInstance().getReference();
mRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(@NotNull DataSnapshot dataSnapshot){
// Get the max_user_id to set the main user id and create the user on Firebase real-time DB \\
String maxUserId = dataSnapshot.child("max_user_id").getValue().toString();
int maxUserIdToInt = Integer.parseInt(maxUserId);
int userId = maxUserIdToInt+1;
newUserId = String.valueOf(userId);
mRef.child("users").child(newUserId).child("name").setValue(display_name_input);
}
@Override
public void onCancelled(@NotNull DatabaseError databaseError){
Toast.makeText(SignupActivity.this,"error: " + databaseError, Toast.LENGTH_LONG).show();
}
});
mRef.child("users").child(newUserId);
那句话毫无意义