막무가내 삽질 블로그
안드로이드 파이어베이스로 사용자 프로필 저장 본문
728x90
오늘은 기본적인 사용자 프로필을 데이터베이스 스토리지에 저장했다
우선 사용자의 기본정보가 필요하니 클래스를 하나 생성했다
public class UserModel {
// 사용자 기본정보
public String userName; // 사용자 이름(닉네임)
public String profileImageUrl; // 사용자 프로필사진
public String uid; // 현재 사용자(로그인한)
// public String pushToken;
}
회원가입화면에서 정보들을 입력한 후 데이터베이스에 바로 저장하는 코드이다.
이미지는 Storage에 저장되고 사용자 정보는 DB에 저장된다.
public static final int PICK_FROM_ALBUM = 1;
private Uri imageUri;
private String pathUri;
private File tempFile;
private FirebaseAuth mAuth;
private FirebaseDatabase mDatabase;
private FirebaseStorage mStorage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_meberjoin);
// Authentication, Database, Storage 초기화
mAuth = FirebaseAuth.getInstance();
mDatabase = FirebaseDatabase.getInstance();
mStorage = FirebaseStorage.getInstance();
// 변수 할당
editText1 = findViewById(R.id.editText1);
editText2 = findViewById(R.id.editText2);
editText3 = findViewById(R.id.editText3);
profile = findViewById(R.id.memberjoin_iv);
signup = findViewById(R.id.Meberjoin_bt);
signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signup();
}
});
profile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
gotoAlbum();
}
});
}
// 앨범 메소드
private void gotoAlbum() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(MediaStore.Images.Media.CONTENT_TYPE);
startActivityForResult(intent, PICK_FROM_ALBUM);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (resultCode != RESULT_OK) { // 코드가 틀릴경우
toast("취소 되었습니다");
if (tempFile != null) {
if (tempFile.exists()) {
if (tempFile.delete()) {
Log.e(TAG, tempFile.getAbsolutePath() + " 삭제 성공");
tempFile = null;
}
}
}
return;
}
switch (requestCode) {
case PICK_FROM_ALBUM: { // 코드 일치
// Uri
imageUri = data.getData();
pathUri = getPath(data.getData());
Log.d(TAG, "PICK_FROM_ALBUM photoUri : " + imageUri);
profile.setImageURI(imageUri); // 이미지 띄움
break;
}
}
}
// uri 절대경로 가져오기
public String getPath(Uri uri) {
String[] proj = {MediaStore.Images.Media.DATA};
CursorLoader cursorLoader = new CursorLoader(this, uri, proj, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();
int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(index);
}
// 회원가입 로직
private void signup() {
name = editText1.getText().toString();
email = editText2.getText().toString();
pw = editText3.getText().toString();
// 프로필사진,이름,이메일,비밀번호 중 하나라도 비었으면 return
if (TextUtils.isEmpty(name) || TextUtils.isEmpty(email) ||
TextUtils.isEmpty(pw) || profile == null) {
toast("정보를 바르게 입력해 주세요");
return;
}
try {
// Authentication에 email,pw 생성
mAuth.createUserWithEmailAndPassword(email, pw)
.addOnCompleteListener
(MeberjoinActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) { // 회원가입 성공시
// uid에 task, 선택된 사진을 file에 할당
final String uid = task.getResult().getUser().getUid();
final Uri file = Uri.fromFile(new File(pathUri)); // path
// 스토리지에 방생성 후 선택한 이미지 넣음
StorageReference storageReference = mStorage.getReference()
.child("usersprofileImages").child("uid/"+file.getLastPathSegment());
storageReference.putFile(imageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
final Task<Uri> imageUrl = task.getResult().getStorage().getDownloadUrl();
while (!imageUrl.isComplete()) ;
UserModel userModel = new UserModel();
userModel.userName = name;
userModel.uid = uid;
userModel.profileImageUrl = imageUrl.getResult().toString();
// database에 저장
mDatabase.getReference().child("users").child(uid)
.setValue(userModel);
}
});
toast("회원가입에 성공하였습니다");
startMainActivity();
} else {
if (task.getException() != null) { // 회원가입 실패시
toast("가입에 실패 하였습니다");
Log.d(TAG, "createUserWithEmail:failure");
}
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
Storage - userprofileImages - uid 안에 선택한 프로필이미지들이 저장 된다.
이미지를 클릭하면 이름, 다운로드 URL을 확인할 수 있다.
DB에 사용자들의 정보가 저장되어 있다(DB-users-uid)
사용자의 id값으로 저장되어 있고
profileimageurl은 스토리지에 저장되어있던 다운로드 url과 일치하게 된다.
안드로이드 스터디 모집
www.notion.so/fundevjay/Android-ddf96b24265e414fb2d9e8fc5d388b80
'Android' 카테고리의 다른 글
FragmentPagerAdapter 와 FragmentStatePagerAdapter 의 차이 (0) | 2019.09.13 |
---|---|
안드로이드 파이어베이스를 사용하여 저장된 데이터 수정,삭제 (2) | 2019.06.03 |
안드로이드 파이어베이스 게시글데이터 저장, 불러오기 (1) | 2019.06.02 |
안드로이드 파이어베이스 스토리지에 사진 저장 (0) | 2019.06.01 |
안드로이드 SharedPreferences (0) | 2019.05.27 |
Comments