如何使用Java将上传到Fire Storage的图像Url上传到fireStore中,同时将其保存在fireStore中
这是我的代码,我可以在Toast消息中检索图像Url,但它无法保存在firestore中。请告诉我是否有其他方法来执行此操作,或者我在存储Url时遇到了问题:如何使用Java将上传到Fire Storage的图像Url上传到fireStore中,同时将其保存在fireStore中,java,android,firebase,google-cloud-firestore,firebase-storage,Java,Android,Firebase,Google Cloud Firestore,Firebase Storage,这是我的代码,我可以在Toast消息中检索图像Url,但它无法保存在firestore中。请告诉我是否有其他方法来执行此操作,或者我在存储Url时遇到了问题: public class register extends AppCompatActivity { EditText emails; EditText passwords; EditText ages; Button registers; Button addImage; EditTex
public class register extends AppCompatActivity {
EditText emails;
EditText passwords;
EditText ages;
Button registers;
Button addImage;
EditText country;
FirebaseFirestore db;
FirebaseAuth auth;
FirebaseUser auth1;
private StorageTask task;
Uri url ;
Uri imageUri;
static final int IMAGE_REQUEST =2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
auth = FirebaseAuth.getInstance();
registers = findViewById(R.id.button);
emails = findViewById(R.id.eamil);
passwords = findViewById(R.id.password);
ages=findViewById(R.id.age);
country=findViewById(R.id.country);
addImage = findViewById(R.id.button51);
db =FirebaseFirestore.getInstance();
registers.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String v_email = emails.getText().toString();
String v_password = passwords.getText().toString();
if (TextUtils.isEmpty(v_email)||TextUtils.isEmpty(v_password)){
Toast.makeText(register.this,"Eempty Credentials",Toast.LENGTH_SHORT).show();
}else if(v_password.length()<6){
Toast.makeText(register.this,":password is short",Toast.LENGTH_SHORT).show();
}else{
upload();
registerUser(v_email, v_password);
}
}
});
addImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openImage();
}
});
}
private void registerUser(final String email, final String password) {
auth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(register.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Map<String , Object> users = new HashMap<>();
users.put("Email", emails.getText().toString());
users.put("Password", passwords.getText().toString());
users.put("Country", country.getText().toString());
users.put("AGe", ages.getText().toString());
users.put("Image", url.toString());
auth1 = FirebaseAuth.getInstance().getCurrentUser();
db.collection("Users").document(auth1.getUid()).set(users).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
//Toast.makeText(com.example.pleasework.register.this,"registeration was successful",Toast.LENGTH_SHORT).show();
}
});
// startActivity(new Intent(com.example.pleasework.register.this, MainActivity.class));
// finish();
}else{
Toast.makeText(com.example.pleasework.register.this,"Resgisteration fail",Toast.LENGTH_SHORT).show();
}
}
});
}
public String getFileExtension(Uri uri){
ContentResolver contentResolver = getContentResolver();
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
}
public void upload (){
if (imageUri != null){
final StorageReference fileRef = FirebaseStorage.getInstance().getReference(System.currentTimeMillis()+getFileExtension(imageUri) );
fileRef.putFile(imageUri)
.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
url = uri;
Toast.makeText(register.this,"Upload Sucess" + url.toString(),Toast.LENGTH_SHORT).show();
}
});
}
});
}
}
public void openImage(){
Intent intent = new Intent();
intent.setType("image/");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
imageUri=data.getData();
}
}
}
});
}
}
公共类寄存器扩展AppCompative活动{
编辑文本电子邮件;
编辑文本密码;
编辑文本时代;
按钮寄存器;
按钮添加图像;
编辑文本国家;
FirebaseFirestore数据库;
FirebaseAuth-auth;
FirebaseUser auth1;
私有存储任务;
uriurl;
Uri-imageUri;
静态最终int图像_请求=2;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u寄存器);
auth=FirebaseAuth.getInstance();
寄存器=findviewbyd(R.id.button);
电子邮件=findViewById(R.id.eamil);
密码=findViewById(R.id.password);
ages=findViewById(R.id.age);
国家=findViewById(R.id.country);
addImage=findViewById(R.id.按钮51);
db=FirebaseFirestore.getInstance();
registers.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串v_email=emails.getText().toString();
字符串v_password=passwords.getText().toString();
if(TextUtils.isEmpty(v|u电子邮件)| TextUtils.isEmpty(v|u密码)){
Toast.makeText(register.this,“Eempty Credentials”,Toast.LENGTH_SHORT.show();
}else if(v_password.length()调用此进程,用于在进程之前执行进程
它可以同时上传图像和数据,因此图像链接不会存储,因为它没有完成图像的上传,这不到一秒钟
当图像上传完毕,数据存储在FireStore中时,您可以使用此方法:
private void registerUser(final String email, final String password) {
auth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(register.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
upload ();
}
});
public void upload (){
if (imageUri != null){
final StorageReference fileRef = FirebaseStorage.getInstance().getReference(System.currentTimeMillis()+getFileExtension(imageUri) );
fileRef.putFile(imageUri)
.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
url = uri;
Map<String , Object> users = new HashMap<>();
users.put("Email", emails.getText().toString());
users.put("Password", passwords.getText().toString());
users.put("Country", country.getText().toString());
users.put("AGe", ages.getText().toString());
users.put("Image", url.toString());
auth1 = FirebaseAuth.getInstance().getCurrentUser();
db.collection("Users").document(auth1.getUid()).set(users).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(register.this,"Upload Sucess" + url.toString(),Toast.LENGTH_SHORT).show();
}
});
}
});
}
});
}
}
private void registerUser(最终字符串电子邮件,最终字符串密码){
auth.createUserWithEmailAndPassword(电子邮件,密码).addOnCompleteListener(register.this,new OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
上传();
}
});
此处确保先上传图像,然后将ImageUrl添加到fireStore:
private void registerUser(final String email, final String password) {
auth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(register.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
upload ();
}
});
public void upload (){
if (imageUri != null){
final StorageReference fileRef = FirebaseStorage.getInstance().getReference(System.currentTimeMillis()+getFileExtension(imageUri) );
fileRef.putFile(imageUri)
.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
url = uri;
Map<String , Object> users = new HashMap<>();
users.put("Email", emails.getText().toString());
users.put("Password", passwords.getText().toString());
users.put("Country", country.getText().toString());
users.put("AGe", ages.getText().toString());
users.put("Image", url.toString());
auth1 = FirebaseAuth.getInstance().getCurrentUser();
db.collection("Users").document(auth1.getUid()).set(users).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(register.this,"Upload Sucess" + url.toString(),Toast.LENGTH_SHORT).show();
}
});
}
});
}
});
}
}
公共作废上传(){
if(imageUri!=null){
final StorageReference fileRef=FirebaseStorage.getInstance().getReference(System.currentTimeMillis()+getFileExtension(imageUri));
fileRef.putFile(imageUri)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
fileRef.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
url=uri;
Map users=newhashmap();
users.put(“Email”,emails.getText().toString());
users.put(“Password”,passwords.getText().toString());
users.put(“Country”,Country.getText().toString());
users.put(“AGe”,ages.getText().toString());
user.put(“Image”,url.toString());
auth1=FirebaseAuth.getInstance().getCurrentUser();
db.collection(“Users”).document(auth1.getUid()).set(Users.addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
Toast.makeText(register.this,“Upload success”+url.toString(),Toast.LENGTH\u SHORT.show();
}
});
}
});
}
});
}
}