[Firebase] [Android] Storage의 폴더 내 모든 이미지 다운로드하기

최승원·2021년 4월 6일
0
post-thumbnail

앞의 포스팅에 이어서 firebase storage의 한 폴더에 업로드한 모든 이미지를 firebase 내에 다운로드하는 방법이다.

저번 포스팅에서는 PC에서 구글 클라우드 스토리지로 이미지 파일을 업로드 했고, 이번 포스팅에서는 구글 클라우드 스토리지와 동일한 파이어베이스 스토리지에서 모바일로 이미지 파일을 다운로드한다.

이 코드의 특징은 다음과 같다.
- 이미지를 하나 받으면, 동적으로 imageview 하나와 textview 하나를 생성한다.
- 폴더 내에 몇 개의 이미지가 있을지 모르고, 각각의 이미지마다 textview를 이용해서 이미지에 대한 설명을 붙이기 때문이다.

다음은 코드 전문이다.

// 이미지 폴더 경로 참조
StorageReference listRef = FirebaseStorage.getInstance().getReference().child("[Firebase Storage의 이미지 폴더 경로]");

// listAll(): 폴더 내의 모든 이미지를 가져오는 함수
listRef.listAll()
                .addOnSuccessListener(new OnSuccessListener<ListResult>() {
                    @Override
                    public void onSuccess(ListResult listResult) {
                        int i = 1;
                        // 폴더 내의 item이 동날 때까지 모두 가져온다.
                        for (StorageReference item : listResult.getItems()) {

                            // imageview와 textview를 생성할 레이아웃 id 받아오기
                            LinearLayout layout = (LinearLayout) findViewById(R.id.maskImageLayout);
                            // textview 동적생성
                            TextView tv = new TextView(MaskInspectionActivity.this);
                            tv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                            tv.setText(Integer.toString(i)+". new TextView");
                            tv.setTextSize(30);
                            tv.setTextColor(0xff004497);
                            layout.addView(tv);
							
                            //imageview 동적생성
                            ImageView iv = new ImageView(MaskInspectionActivity.this);
                            iv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                            layout.addView(iv);
                            i++; // 구현에는 의미 없는 코드.. 내 프로젝트에만 필요함
  
  				// reference의 item(이미지) url 받아오기
  				item.getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
                                @Override
                                public void onComplete(@NonNull Task<Uri> task) {
                                    if (task.isSuccessful()) {
                                        // Glide 이용하여 이미지뷰에 로딩
                                        Glide.with(MaskInspectionActivity.this)
                                                .load(task.getResult())
                                                .into(iv);
                                    } else {
                                        // URL을 가져오지 못하면 토스트 메세지
                                        Toast.makeText(MaskInspectionActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                                    }
                                }

                            }).addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {
                                    // Uh-oh, an error occurred!
                                }
                            });
                        }
                    }
                });

아래 링크의 firebase 공식 문서를 참조했다.
Firebase 파일 나열하기 공식 문서

profile
문의 사항은 메일로 부탁드립니다🙇‍♀️

0개의 댓글