Viết
·
697
0
안녕하세요. 강의 잘 보고 있습니다.
그런데 여기서 getDownloadUrl이 버전이 바뀌어서 안되는 것 같은데
혹시 해결책을 알고 계신가요?
Câu trả lời 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
제가 답변이 늦었군요.. 저도 아쉽게도 파이어베이스 문법이 바뀐것을 아쉽게 생각하고 있습니다. 조만간 파이어베이스 16버전 올릴 예정이니 참고바랍니다.
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);
이렇게 바꾸니까 정상작동 하네요
복받으세요