이번 시간에는 Firebase를 통해서 업로드한 이미지를 가져와서
리스트로 보여주는 방법을 알아보겠습니다.
이전에 했던 포스팅을 이어서 하니 먼저 보시면 됩니다.
2022.03.16 - [안드로이드] - [안드로이드] Firebase Storage 이미지 업로드 part1
[안드로이드] Firebase Storage 이미지 업로드 part1
이번 시간에는 Firebase를 통해서 이미지를 업로드하는 방법을 알아보겠습니다. 간단하게 설명하자면 Firebase의 Storage에 이미지를 업로드하고, 이미지가 저장된 주소를 Realtime Database에 저장합니다.
aries574.tistory.com
먼저 Realtime Database 설정을 해야 하기 때문에 모르시면
아래 링크를 보시고 따라 하시면 됩니다.
2022.03.09 - [안드로이드] - [안드로이드] Firebase 시작하기 실시간 데이터베이스 Realtime Database (간단한 데이터 읽기, 쓰기) part1
[안드로이드] Firebase 시작하기 실시간 데이터베이스 Realtime Database (간단한 데이터 읽기, 쓰기) part
이번 시간에는 Firebase를 통해 데이터베이스에 간단한 데이터를 쓰고 읽는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 프로젝트 만들기 3. 앱 만들기 4. 데이터 베이스 만들기 5. 라이브러
aries574.tistory.com
build.gradle(Module:프로젝트명:app)
dependencies 괄호 안에 아래 코드를 넣어주시면 됩니다.
implementation 'com.github.bumptech.glide:glide:4.13.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'
setting.gradle
repositories 괄호 안에 아래 코드를 넣어주시면 됩니다.
maven { url 'https://jitpack.io' }
참조 문서
https://github.com/bumptech/glide
GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling
An image loading and caching library for Android focused on smooth scrolling - GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling
github.com
- 설명 -
이미지뷰를 통해 이미지를 보여줍니다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="250dp"
android:layout_margin="20dp"
android:elevation="10dp">
<ImageView
android:id="@+id/m_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
</androidx.cardview.widget.CardView>
- 설명 -
등록한 라이브러리 Glide를 통해 이미지를 이미지 뷰에 보여줍니다.
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyViewHolder>{
Context context;
ArrayList<Model> list = new ArrayList<>();
public ImageAdapter(Context context, ArrayList<Model> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.list_item, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Glide.with(context).load(list.get(position).getImageUri()).into(holder.mImageView);
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
ImageView mImageView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
mImageView = itemView.findViewById(R.id.m_image);
}
}
}
app 선택 -> 마우스 오른쪽 클릭 -> New -> Activity -> Empty Activity
Activity Name: ImageActivity
activity_image.xml
- 설명 -
RecyclerView를 통해 이미지를 리스트로 보여줍니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ImageActivity">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler_view"/>
</LinearLayout>
ImageActivity.java
public class ImageActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private ArrayList<Model> list;
ImageAdapter adapter;
private DatabaseReference root = FirebaseDatabase.getInstance().getReference("Image");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image);
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
list = new ArrayList<>();
adapter = new ImageAdapter(ImageActivity.this ,list);
recyclerView.setAdapter(adapter);
root.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot dataSnapshot : snapshot.getChildren()){
Model model = dataSnapshot.getValue(Model.class);
list.add(model);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
- 추가 부분 -
- 설명 -
이미지리스트 액티비티로 이동시킬 버튼을 추가했습니다.
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/image_list_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
android:textSize="20sp"
android:text="IMAGE LIST"/>
- 전체 코드 -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ImageView
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_marginTop="50dp"
android:layout_gravity="center"
android:src="@drawable/ic_add_photo"
android:id="@+id/image_view"/>
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/progress_View"/>
<androidx.appcompat.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
android:layout_marginTop="50dp"
android:text="UPLOAD"
android:textSize="20sp"
android:id="@+id/upload_btn"/>
<androidx.appcompat.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
android:layout_marginTop="50dp"
android:text="IMAGE LIST"
android:textSize="20sp"
android:id="@+id/image_list_btn"/>
</LinearLayout>
- 추가 부분 -
- 설명 -
버튼을 클릭하면, 이미지 리스트 액티비티로 이동한다.
Button imageListBtn = findViewById(R.id.image_list_btn);
imageListBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, ImageActivity.class));
}
});
- 전체 코드 -
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
private ProgressBar progressBar;
private final DatabaseReference root = FirebaseDatabase.getInstance().getReference("Image");
private final StorageReference reference = FirebaseStorage.getInstance().getReference();
private Uri imageUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//컴포넌트 객체에 담기
Button uploadBtn = findViewById(R.id.upload_btn);
progressBar = findViewById(R.id.progress_View);
imageView = findViewById(R.id.image_view);
//프로그래스바 숨기기
progressBar.setVisibility(View.INVISIBLE);
//이미지 클릭 이벤트
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent galleryIntent = new Intent();
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
activityResult.launch(galleryIntent);
}
});
//업로드버튼 클릭이벤트
uploadBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(imageUri != null){
uploadToFirebase(imageUri);
}else{
Toast.makeText(MainActivity.this, "사진을 선택해주세요",
Toast.LENGTH_SHORT).show();
}
}
});
//이미지 리스트
Button imageListBtn = findViewById(R.id.image_list_btn);
imageListBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, ImageActivity.class));
}
});
}//onCreate
//파이어베이스 이미지 업로드
private void uploadToFirebase(Uri uri) {
StorageReference fileRef = reference.child(System.currentTimeMillis() + "." +
getFileExtension(uri));
fileRef.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
//성공시
fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
//이미지 모델에 담기
Model model = new Model(uri.toString());
//키로 아이디 생성
String modelId = root.push().getKey();
//데이터 넣기
root.child(modelId).setValue(model);
//프로그래스바 숨김
progressBar.setVisibility(View.INVISIBLE);
Toast.makeText(MainActivity.this, "업로드 성공",
Toast.LENGTH_SHORT).show();
imageView.setImageResource(R.drawable.ic_add_photo);
}
});
}
}).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(@NonNull UploadTask.TaskSnapshot snapshot) {
//프로그래스바 보여주기
progressBar.setVisibility(View.VISIBLE);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//실패
Toast.makeText(MainActivity.this, "업로드 실패", Toast.LENGTH_SHORT).show();
}
});
}
private String getFileExtension(Uri uri){
ContentResolver cr = getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
return mime.getExtensionFromMimeType(cr.getType(uri));
}
//사진 가져오기
ActivityResultLauncher<Intent> activityResult = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode() == RESULT_OK && result.getData() != null){
imageUri = result.getData().getData();
imageView.setImageURI(imageUri);
}
}
});
}//MainActivity
2022.03.12 - [안드로이드] - [안드로이드] Firebase Realtime Database RecyclerView 사용자 등록하는 방법
[안드로이드] Firebase Realtime Database RecyclerView 사용자 등록하는 방법
이번 시간에는 Firebase Realtime Database에 사용자 정보를 등록하는 방법을 알아보겠습니다. Firebase Realtime Database 설정부분은 아래 링크를 따라하시면 됩니다. 2022.03.09 - [안드로이드] - [안드로이드..
aries574.tistory.com
2022.03.13 - [안드로이드] - [안드로이드] Firebase Realtime Database RecyclerView 사용자 리스트 보는 방법
[안드로이드] Firebase Realtime Database RecyclerView 사용자 리스트 보는 방법
이번 시간에는 Firebase Realtime Database에 등록된 사용자 정보를 가져와서 리스트로 보여 주는 방법에 대하여 알아보겠습니다. 이전 포스팅에 이어서 하기 때문에 먼저 보시고 오시면 됩니다. 2022.03.
aries574.tistory.com
2022.03.14 - [안드로이드] - [안드로이드] Firebase Realtime Database RecyclerView 사용자 수정하는 방법
[안드로이드] Firebase Realtime Database RecyclerView 사용자 수정하는 방법
이번 시간에는 Firebase Realtime Database에 등록된 사용자 정보를 가져와서 수정하고 다시 데이터베이스에 저장하는 방법을 알아보겠습니다. 이전 포스팅에 이어서 하기 때문에 먼저 보시고 오시면
aries574.tistory.com
2022.03.15 - [안드로이드] - [안드로이드] Firebase Realtime Database RecyclerView 사용자 삭제하는 방법
[안드로이드] Firebase Realtime Database RecyclerView 사용자 삭제하는 방법
이번 시간에는 Firebase Realtime Database에 등록된 사용자 정보를 삭제하는 방법을 알아보겠습니다. 이전 포스팅에 이어서 하기 때문에 먼저 보시고 오시면 됩니다. 2022.03.14 - [안드로이드] - [안드로
aries574.tistory.com
[안드로이드] 간단한 할 일 목록(ToDoList) 쉽게 만드는 방법 (0) | 2022.03.19 |
---|---|
[안드로이드] 이미지 원형으로 쉽게 표현하는 방법 (0) | 2022.03.18 |
[안드로이드] Firebase Storage 이미지 업로드 part1 (2) | 2022.03.16 |
[안드로이드] Firebase Realtime Database RecyclerView 사용자 삭제하는 방법 (0) | 2022.03.15 |
[안드로이드] Firebase Realtime Database RecyclerView 사용자 수정하는 방법 (0) | 2022.03.14 |
댓글 영역