인프런 커뮤니티 질문&답변

duskagk님의 프로필 이미지

작성한 질문수

Firebase 서버를 통한 Android앱 HowlTalk 만들기

SignupActivity 만들기 2

getDownloadUrl

작성

·

601

0

안녕하세요. 강의 잘 보고 있습니다.

그런데 여기서 getDownloadUrl이 버전이 바뀌어서 안되는 것 같은데

혹시 해결책을 알고 계신가요?

답변 8

1

duskagk님의 프로필 이미지
duskagk
질문자

                    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

duskagk님의 프로필 이미지
duskagk
질문자

그리고 질문에 getUploadSessionUri 사용하셨는데 저러면 나중에 사진 안 나오실 겁니다.

제가 올린 두번째 답변에 보시면

FirebaseStorage.getInstance().getReference().child("userImg").child(uid).getDownloadUrl()

이거 응용 하셔야 url 받아 오실수 있습니다.

0

duskagk님의 프로필 이미지
duskagk
질문자

이거 하실 때 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

duskagk님의 프로필 이미지
duskagk
질문자

                                    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);

이렇게 바꾸니까 정상작동 하네요

duskagk님의 프로필 이미지

작성한 질문수

질문하기