在 android 中的身份验证期间,将用户个人资料图片上传到 firebase 时出错
Having error while uploading user profile image to firebase, during authentication in android
我使用 firebase 开发了身份验证,它运行良好,但我想添加一个额外的模块来添加用户配置文件图像。所以我首先编写了 2 个函数,用于在 firebase 实时数据库中使用电子邮件和密码进行用户注册,第二个用于上传用户个人资料图像......
我只是在用户模型 class 中添加了 pimage 变量,但是我在用户模型对象的先前参数和 (uri.toString());
中出现错误
这是使用电子邮件和密码创建用户的代码
private void register_doctor () {
String dname = et_name.getText().toString().trim();
String demail = et_email.getText().toString().trim();
String dpass = et_pass.getText().toString().trim();
String dcpass = et_cnf_pass.getText().toString().trim();
String dcontact = et_contact.getText().toString().trim();
String dcity = et_city.getText().toString().trim();
String dage = et_age.getText().toString().trim();
if (dname.isEmpty()) {
et_name.setError("Full Name is Required");
et_name.requestFocus();
return;
}
if (demail.isEmpty()) {
et_email.setError("Email is Required");
et_email.requestFocus();
return;
}
if (dpass.isEmpty()) {
et_pass.setError("Password is Required");
et_pass.requestFocus();
return;
}
if (dpass.length() < 6) {
et_pass.setError("Password Length Should be greater than 6 characters");
et_pass.requestFocus();
return;
}
if (dcpass.isEmpty()) {
et_cnf_pass.setError("Password is Required");
et_cnf_pass.requestFocus();
return;
}
if (!dcpass.equals(dpass)) {
et_cnf_pass.setError("Password Does not Matched!");
et_cnf_pass.requestFocus();
return;
}
if (dcontact.isEmpty()) {
et_contact.setError("Contact is Required");
et_contact.requestFocus();
return;
}
if (dcity.isEmpty()) {
et_city.setError("City is Required");
et_city.requestFocus();
return;
}
if (dage.isEmpty()) {
et_age.setError("Age is Required");
et_age.requestFocus();
return;
}
progressBar.setVisibility(View.VISIBLE);
mAuth.createUserWithEmailAndPassword(demail, dpass)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
User user = new User(dname, demail, dcontact, dcity, dage);
FirebaseDatabase.getInstance().getReference("doctors")
.child("Doctors_Registration")
// .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child(demail.replace(".", ","))
.setValue(user)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(signup.this, "Doctor Registered", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
} else {
Toast.makeText(signup.this, "Failed to Registered, Try Again!" + task.getException(), Toast.LENGTH_LONG).show();
progressBar.setVisibility(View.GONE);
}
}
});
} else {
Toast.makeText(signup.this, "Failed to Registered, Try Again!", Toast.LENGTH_LONG).show();
progressBar.setVisibility(View.GONE);
}
}
});
}
这里是上传用户头像的功能
private void upload_image() {
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference uploader = storage.getReference("Image1"+ new Random().nextInt(50));
uploader.putFile(filepath)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
uploader.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference root = db.getReference("Doctors_Registration");
User obj = new User(uri.toString());
root.child(et_email.getText().toString()).setValue(obj);
// iv.setImageResource(R.drawable.ic_launcher_background);
Toast.makeText(signup.this, "Profile Image Uploaded", Toast.LENGTH_SHORT).show();
}
});
}
});
}
这里是用户模型class代码
public class User {
public String name, email, password, contact, city, age, pimage;
public User(){
}
public User(String name, String email, String contact, String city, String age, String pimage){
this.name = name;
this.email = email;
this.contact = contact;
this.city = city;
this.age = age;
this.pimage = pimage;
}
}
您的 User
class 有两个构造函数:
- 不接受任何参数。
- 还有一个以 6 个字符串值作为参数。
在您试图构造一个 User
对象的两个屏幕截图中:
- 首先用一个字符串值,
- 然后是 5 个字符串值。
由于这些调用都不匹配您定义的构造函数,因此编译器无法编译您的代码。
要允许构建 User
,请确保为要传递的参数添加构造函数重载,或者传递与您定义的构造函数相匹配的参数。
我使用 firebase 开发了身份验证,它运行良好,但我想添加一个额外的模块来添加用户配置文件图像。所以我首先编写了 2 个函数,用于在 firebase 实时数据库中使用电子邮件和密码进行用户注册,第二个用于上传用户个人资料图像...... 我只是在用户模型 class 中添加了 pimage 变量,但是我在用户模型对象的先前参数和 (uri.toString());
中出现错误这是使用电子邮件和密码创建用户的代码
private void register_doctor () {
String dname = et_name.getText().toString().trim();
String demail = et_email.getText().toString().trim();
String dpass = et_pass.getText().toString().trim();
String dcpass = et_cnf_pass.getText().toString().trim();
String dcontact = et_contact.getText().toString().trim();
String dcity = et_city.getText().toString().trim();
String dage = et_age.getText().toString().trim();
if (dname.isEmpty()) {
et_name.setError("Full Name is Required");
et_name.requestFocus();
return;
}
if (demail.isEmpty()) {
et_email.setError("Email is Required");
et_email.requestFocus();
return;
}
if (dpass.isEmpty()) {
et_pass.setError("Password is Required");
et_pass.requestFocus();
return;
}
if (dpass.length() < 6) {
et_pass.setError("Password Length Should be greater than 6 characters");
et_pass.requestFocus();
return;
}
if (dcpass.isEmpty()) {
et_cnf_pass.setError("Password is Required");
et_cnf_pass.requestFocus();
return;
}
if (!dcpass.equals(dpass)) {
et_cnf_pass.setError("Password Does not Matched!");
et_cnf_pass.requestFocus();
return;
}
if (dcontact.isEmpty()) {
et_contact.setError("Contact is Required");
et_contact.requestFocus();
return;
}
if (dcity.isEmpty()) {
et_city.setError("City is Required");
et_city.requestFocus();
return;
}
if (dage.isEmpty()) {
et_age.setError("Age is Required");
et_age.requestFocus();
return;
}
progressBar.setVisibility(View.VISIBLE);
mAuth.createUserWithEmailAndPassword(demail, dpass)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
User user = new User(dname, demail, dcontact, dcity, dage);
FirebaseDatabase.getInstance().getReference("doctors")
.child("Doctors_Registration")
// .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child(demail.replace(".", ","))
.setValue(user)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(signup.this, "Doctor Registered", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
} else {
Toast.makeText(signup.this, "Failed to Registered, Try Again!" + task.getException(), Toast.LENGTH_LONG).show();
progressBar.setVisibility(View.GONE);
}
}
});
} else {
Toast.makeText(signup.this, "Failed to Registered, Try Again!", Toast.LENGTH_LONG).show();
progressBar.setVisibility(View.GONE);
}
}
});
}
这里是上传用户头像的功能
private void upload_image() {
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference uploader = storage.getReference("Image1"+ new Random().nextInt(50));
uploader.putFile(filepath)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
uploader.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
FirebaseDatabase db = FirebaseDatabase.getInstance();
DatabaseReference root = db.getReference("Doctors_Registration");
User obj = new User(uri.toString());
root.child(et_email.getText().toString()).setValue(obj);
// iv.setImageResource(R.drawable.ic_launcher_background);
Toast.makeText(signup.this, "Profile Image Uploaded", Toast.LENGTH_SHORT).show();
}
});
}
});
}
这里是用户模型class代码
public class User {
public String name, email, password, contact, city, age, pimage;
public User(){
}
public User(String name, String email, String contact, String city, String age, String pimage){
this.name = name;
this.email = email;
this.contact = contact;
this.city = city;
this.age = age;
this.pimage = pimage;
}
}
您的 User
class 有两个构造函数:
- 不接受任何参数。
- 还有一个以 6 个字符串值作为参数。
在您试图构造一个 User
对象的两个屏幕截图中:
- 首先用一个字符串值,
- 然后是 5 个字符串值。
由于这些调用都不匹配您定义的构造函数,因此编译器无法编译您的代码。
要允许构建 User
,请确保为要传递的参数添加构造函数重载,或者传递与您定义的构造函数相匹配的参数。