막무가내 삽질 블로그

안드로이드 파이어베이스 게시글데이터 저장, 불러오기 본문

Android

안드로이드 파이어베이스 게시글데이터 저장, 불러오기

joong~ 2019. 6. 2. 02:44
728x90

사용자가 게시했을때 필요정보들을 모아둔 클래스이다.

int startCount, Map stars는 나중에 정리할 예정이다.

public class PostModel {

        public String myid; // 로그인한 아이디
        public String photo; // 게시글 사진
        public String photoName; // 게시글사진 이름(사진삭제할때 필요, 절대경로를 뜻함)
        public String contents; // 게시글 내용
//        public String person; // 친구태그
        public String location; // 위치
        public String userprofileimage; // 회원가입시 프로필사진
        public String username; // 회원가입시 닉네임

        public int starCount = 0; // 좋아요 갯수
        public Map<String, Boolean> stars = new HashMap<>(); // 좋아요 한 사람
        // String 값은 아이디를 뜻하고, boolean 은 true

}

 

다음은 게시글을 작성하고 저장하는 코드이다.

ibtn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                c = editText.getText().toString(); // 게시글
                f = friends.getText().toString(); // 친구태그
                l = location.getText().toString(); // 위치

                final String uid = mAuth.getCurrentUser().getUid();
                final Uri file = Uri.fromFile(new File(Uripath)); // 절대경로uri를 file에 할당
                Log.d(TAG, "phto file : " + file);

                StorageReference storageReference = mStorage.getReference().child("userImages").child("uid/"+file.getLastPathSegment());
                storageReference.putFile(uriUri).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()) ;

                        mDatabase.getReference().child("users").child(uid)
                                .addListenerForSingleValueEvent(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                        UserModel userModel = dataSnapshot.getValue(UserModel.class);
                                        Log.d(TAG, "profileImageUrl" + userModel.profileImageUrl);
                                        Log.d(TAG, "userName" + userModel.userName);

                                        PostModel postModel = new PostModel();

                                        postModel.myid = uid;
                                        postModel.photo = imageUrl.getResult().toString();
                                        postModel.userprofileimage = userModel.profileImageUrl;
                                        postModel.photoName = file.getLastPathSegment();
                                        postModel.contents = c;
                                        postModel.location = l;
                                        postModel.username = userModel.userName;

                                        // 게시글 내용 저장
                                        mDatabase.getReference().child("contents").child("content").push()
                                                .setValue(postModel).addOnSuccessListener(new OnSuccessListener<Void>() {
                                            @Override
                                            public void onSuccess(Void aVoid) {
                                                //
                                            }
                                        });
                                    }

                                    @Override
                                    public void onCancelled(@NonNull DatabaseError databaseError) {

                                    }
                                });

                    }
                });

 

Uripath는 사진의 절대경로이다. getPath코드는 전에 올렸으므로 패스한다.

uriUri는 사진을 선택했을때 uri주소이다.  getLastPathSegment()는 공식문서에 디코드된 경로를 가져온다고 나와있다.

절대경로를 가져온다 생각하면된다.

사용자가 게시글을 작성하면 사진은 스토리지에 저장이 되고 나머지들은 DB에 저장되는 코드이다.

 

게시글을 올리게 되면

storage - userImages - uid 에 사진이 쌓이게 된다.

나중에 게시글을 삭제할때 photoName으로(사진의 이름...스토리지에 저장된 이름)  저장된값을 지울 때 사용할 예정이다. 추후에 다시 정리할 예정이다.

 

 

 

안드로이드 스터디 모집 

www.notion.so/fundevjay/Android-ddf96b24265e414fb2d9e8fc5d388b80

Comments