작성
·
601
답변 8
1
FirebaseStorage.getInstance().getReference().child("userImg").child(uid).putFile(Imageuri) .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
FirebaseStorage.getInstance().getReference().child("userImg").child(uid).getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String imgurl=uri.toString();
UserModel userModel=new UserModel();
userModel.ID=email.getText().toString();
userModel.profilimg=imgurl;
FirebaseDatabase.getInstance().getReference().child("users").child(uid).setValue(userModel);
}
});
}
});
이렇게 해야 정상작동하네요
0
스토어에 putFile 할때 .continueWithTask 써서 저장위치 url 얻어오면 돼요
//이미지 스토어와db에 넣기
private void inputImgToFirebaseDatabase(Uri imageUri)
{
mStorage.getReference().child("userImages").child(mAuth.getCurrentUser().getUid()).putFile(imageUri).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
// Continue with the task to get the download URL
return mStorage.getReference().child("userImages").child(mAuth.getCurrentUser().getUid()).getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task)
{
String strImageUrl = task.getResult().toString();
User user = new User();
user.name = editTextUserName.getText().toString();
user.profileImgUrl = strImageUrl;
mDatabase.getReference().child("users").child(mAuth.getCurrentUser().getUid()).setValue(user);
Toast.makeText(UserActivity.this, "변경 완료!", Toast.LENGTH_SHORT).show();
finish();
startActivity(getIntent());
}
});
}
0
그리고 질문에 getUploadSessionUri 사용하셨는데 저러면 나중에 사진 안 나오실 겁니다.
제가 올린 두번째 답변에 보시면
FirebaseStorage.getInstance().getReference().child("userImg").child(uid).getDownloadUrl()
이거 응용 하셔야 url 받아 오실수 있습니다.
0
이거 하실 때 realtime database로 되어 있나요? 혹시 firestore cloud로 되어 있으면
real time database를 개설 해서 규칙에
".read": true,
".write": true
이렇게 바꿔 보세요.
영상은 구버전이라 그런지 지금 할 때는 데이터 베이스를 한번 열어 줘야 하더라구요
0
FirebaseAuth.getInstance()
.createUserWithEmailAndPassword(Id.getText().toString(), pw2.getText().toString())
.addOnCompleteListener(SignUp.this, new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
final String uid = task.getResult().getUser().getUid();
FirebaseStorage.getInstance().getReference().child("userImages").child(uid).putFile(imageURI1).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() { @Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
String imageUri1=task.getResult().getUploadSessionUri().toString();
/*String imageUri2=task.getResult().getUploadSessionUri().toString();
String imageUri3=task.getResult().getUploadSessionUri().toString();*/
if (task.isSuccessful()) {
UserModel userModel = new UserModel();
userModel.userName = name.getText().toString();
userModel.userAge = age.getText().toString();
userModel.userSNS = sns.getText().toString();
userModel.userSex = sex;
userModel.uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
userModel.profileImage1=imageUri1;
/*userModel.profileImage2=imageUri2;
userModel.profileImage3=imageUri3;*/
FirebaseDatabase.getInstance().getReference().child("users").child(uid).setValue(userModel).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(SignUp.this, "Travel Maekr에 가입되셨습니다.", Toast.LENGTH_SHORT).show();
SignUp.this.finish();
}
});
} else {
Toast.makeText(SignUp.this, "이메일이 존재하지 않거나 형식이 올바르지 않습니다.", Toast.LENGTH_SHORT).show();
return;
}
}
});
}
});
}
}
});
안녕하세요ㅠㅠ 도저히 해결 방법을 모르겠어서 질문드립니다.
다른코드는 다 정상 작동 하는데 토스트메시지로 한번 확인해본결과 정확히
FirebaseDatabase.getInstance().getReference().child("users").child(uid).setValue(userModel).addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(SignUp.this, "Travel Maekr에 가입되셨습니다.", Toast.LENGTH_SHORT).show();
SignUp.this.finish();
}
});
이부분만 코드가 안먹는거같아요 파이어베이스 데이터베이스값에 계속 값이 들어가질 않네요...뭐가문제인지 혹시 알수 있을까요? 가입되었다는 토스트메시지를 밖으로 빼면 토스트메시지는 띄워지는걸로 보아 그냥 저 디비에 값넣는거 자체가 안먹는거 같아요
0
FirebaseAuth.getInstance()
.createUserWithEmailAndPassword(Id.getText().toString(), pw2.getText().toString())
.addOnCompleteListener(SignUp.this, new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
final String uid = task.getResult().getUser().getUid();
FirebaseStorage.getInstance().getReference().child("userImages").child(uid).putFile(imageURI1).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() { @Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
String imageUri1=task.getResult().getUploadSessionUri().toString();
/*String imageUri2=task.getResult().getUploadSessionUri().toString();
String imageUri3=task.getResult().getUploadSessionUri().toString();*/
if (task.isSuccessful()) {
UserModel userModel = new UserModel();
userModel.userName = name.getText().toString();
userModel.userAge = age.getText().toString();
userModel.userSNS = sns.getText().toString();
userModel.userSex = sex;
userModel.uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
userModel.profileImage1=imageUri1;
/*userModel.profileImage2=imageUri2;
userModel.profileImage3=imageUri3;*/
FirebaseDatabase.getInstance().getReference().child("users").child(uid).setValue(userModel).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(SignUp.this, "Travel Maekr에 가입되셨습니다.", Toast.LENGTH_SHORT).show();
SignUp.this.finish();
}
});
} else {
Toast.makeText(SignUp.this, "이메일이 존재하지 않거나 형식이 올바르지 않습니다.", Toast.LENGTH_SHORT).show();
return;
}
}
});
}
});
}
}
});
안녕하세요ㅠㅠ 도저히 해결 방법을 모르겠어서 질문드립니다.
다른코드는 다 정상 작동 하는데 토스트메시지로 한번 확인해본결과 정확히
FirebaseDatabase.getInstance().getReference().child("users").child(uid).setValue(userModel).addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(SignUp.this, "Travel Maekr에 가입되셨습니다.", Toast.LENGTH_SHORT).show();
SignUp.this.finish();
}
});
이부분만 코드가 안먹는거같아요 파이어베이스 데이터베이스값에 계속 값이 들어가질 않네요...뭐가문제인지 혹시 알수 있을까요? 가입되었다는 토스트메시지를 밖으로 빼면 토스트메시지는 띄워지는걸로 보아 그냥 저 디비에 값넣는거 자체가 안먹는거 같아요
0
0
String img=task.getResult().getUploadSessionUri().toString(); UserModel userModel=new UserModel();
userModel.ID=email.getText().toString();
userModel.profilimg=img;
FirebaseDatabase.getInstance().getReference().child("users").child(uid).setValue(userModel);
이렇게 바꾸니까 정상작동 하네요
복받으세요