728x90
반응형
Realtime Database의 Product 테이블
package com.example.companymarket.Data;
import android.net.Uri;
public class Product {
private String Pro_uid;
private String Pro_Image;
private String Pro_name;
private int Pro_price;
private String Pro_status;
private String Pro_content;
public Product(){
}
public Product(String Pro_uid, Uri Pro_Image, String Pro_name, int Pro_price, String Pro_status, String Pro_content) {
this.Pro_uid = Pro_uid;
this.Pro_Image = Pro_Image.toString();
this.Pro_name = Pro_name;
this.Pro_price = Pro_price;
this.Pro_status = Pro_status;
this.Pro_content = Pro_content;
}
public String getPro_uid() {
return Pro_uid;
}
public void setPro_uid(String pro_uid) {
Pro_uid = pro_uid;
}
public String getPro_Image() {
return Pro_Image;
}
public void setPro_Image(String pro_Image) {
Pro_Image = pro_Image;
}
public String getPro_name() {
return Pro_name;
}
public void setPro_name(String pro_name) {
Pro_name = pro_name;
}
public int getPro_price() {
return Pro_price;
}
public void setPro_price(int pro_price) {
Pro_price = pro_price;
}
public String getPro_status() {
return Pro_status;
}
public void setPro_status(String pro_status) {
Pro_status = pro_status;
}
public String getPro_content() {
return Pro_content;
}
public void setPro_content(String pro_content) {
Pro_content = pro_content;
}
@Override
public String toString() {
return "Product{" +
"Pro_uid='" + Pro_uid + '\'' +
", Pro_Image='" + Pro_Image + '\'' +
", Pro_name='" + Pro_name + '\'' +
", Pro_price=" + Pro_price +
", Pro_status='" + Pro_status + '\'' +
", Pro_content='" + Pro_content + '\'' +
'}';
}
}
Product class를 작성한다
private var database: FirebaseDatabase? = null
private var databaseReference: DatabaseReference? = null
private var arrayList: ArrayList<Product>? = null
Fragment에 FirebaseDatabase, DatabaseReference, Product class의 데이터를 담을 arrayList를 선언한다
arrayList = ArrayList()
database = FirebaseDatabase.getInstance() // 파이어 데이터베이스 연동
databaseReference = database!!.getReference("Product") // 파이어베이스 Product 테이블 연결
Product 테이블을 연결하고
databaseReference!!.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
// 파이어 베이스 데이터 받아옴
arrayList!!.clear() //배열리스트 초기화
for (snapshot1 in snapshot.children) {
val product = snapshot1.getValue(
Product::class.java
)
arrayList!!.add(product!!)
Log.d("product_data", arrayList.toString())
mainAdapter.getMainAdapter(arrayList!!)
binding.mainRecyclerview.adapter = mainAdapter //setAdapter
}
}
override fun onCancelled(error: DatabaseError) {
Log.d("user_error", error.toException().toString())
}
})
Product class에 정의해둔 형태로 arrayList에 넣고
mainAdapter의 getMainAdapter함수를 실행시킨다
그리고 recyclerview를 mainAdapter로 setAdapter해준다
D/product_data: [Product{Pro_uid='6xOHCf5LYSS3a7aUH2d7u8XLPZw2', Pro_Image='content://media/external/images/media/3893', Pro_name='uidtest', Pro_price=123, Pro_status='aaa', Pro_content='aa'}]
Log로 확인해보니 arrayList에 잘 쌓인다
class MainAdapter : RecyclerView.Adapter<MainAdapter.ViewHolder> () {
private var arrayList: ArrayList<Product> = arrayListOf()
fun getMainAdapter(productDataset : ArrayList<Product>) {
this.arrayList = productDataset
Log.d("array_data", arrayList.toString())
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ViewHolder {
val binding = MainListBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
// ViewHolder의 bind 메소드를 호출한다.
override fun onBindViewHolder(holder: MainAdapter.ViewHolder, position: Int) {
holder.bind(arrayList[position])
}
override fun getItemCount(): Int {
return arrayList.size
}
class ViewHolder(private val binding: MainListBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(data: Product){
//binding.productImage.setImageResource("${data.pro_Image}")
Glide.with(itemView).load("${data.pro_Image}").into(binding.productImage)
binding.productUid.text = "Uid: ${data.pro_uid}"
binding.productName.text = "${data.pro_name}"
binding.productPrice.text = "${data.pro_price}원"
binding.productStatus.text = "${data.pro_status}"
binding.productContent.text = "${data.pro_content}"
}
}
}
Adapter에서도 getMainAdpater함수에서 arrayList의 Log가 동일하게 찍히고
정해둔 itemlist를 binding해서 가져온 데이터를 ViewHolder에서 setText해줬다
itemView.setOnClickListener {
Intent(itemView.context, ContentActivity::class.java).apply {
putExtra("product_Image",data.pro_Image)
putExtra("product_Uid",data.pro_uid)
putExtra("product_name",data.pro_name)
putExtra("product_price",data.pro_price.toString())
putExtra("product_status",data.pro_status.toString())
putExtra("product_content",data.pro_content.toString())
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}.run { itemView.context.startActivity(this) }
}
위의 bind함수에서
각 아이템들은 itemView인데 클릭하면 각 아이템의 데이터를 가지고 Intent하게 해줬다
반응형
'Android' 카테고리의 다른 글
[Android/Kotlin] firebase chat(1/2) 채팅목록 (RecyclerView) (0) | 2022.03.18 |
---|---|
[Android/Kotlin] SecurityException:Permission Denial: reading com.android.providers.media.MediaProvider uri content 에러 (0) | 2022.03.05 |
[Android/Kotlin] Firebase auth 로그인/회원가입 (0) | 2022.03.05 |
[Android/Kotlin] nav, appBarConfiguration 을 사용한 Fragment (0) | 2022.02.27 |
[Android/Kotlin] Navigation Drawer header 접근 (0) | 2022.02.27 |