앞의 포스팅에 이어서 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 파일 나열하기 공식 문서