본문 바로가기

Dead Code/DEPRECATED-KOTLIN

[코틀린코드연습장] Firebase에 값 적고, 불러오기




나의 첫번째 목표는 외부 DB에 값을 쓰고, 읽어오기 까지였다. 


이제. 그 꿈을 이뤘다.


그런데 왜 찝찝하지?




- 구조는, 두개의 입력창으로 데이터를 받고, 

- 버튼을 통해 최신 리스트를 리스트 뷰로 받아온다. 


언제나 그렇듯 메인 코드만.

딴 사람 코드 보고 커스텀 시키는건 1시간, 

Firebase 연동오류 찾는거. 3시간.ㅠㅠ
취미로 하는 이짓이 지겨워질뻔.



class MainActivity : AppCompatActivity() {

var list : MutableList<Hero> = mutableListOf()
val ref = FirebaseDatabase.getInstance().getReference()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

// Input
button.setOnClickListener {

val name = editText.text.toString().trim()
val pn = editText2.text.toString().trim()

if (name.isEmpty()) {
editText.error = "Please insert name"
return@setOnClickListener
}

if (pn.isEmpty()) {
editText2.error = "Please insert name"
return@setOnClickListener
}

val idx = ref.push().key
val hero = Hero(idx.toString(), name, pn)

ref.child(idx.toString()).setValue(hero).addOnCompleteListener{

Toast.makeText(applicationContext, "complete", Toast.LENGTH_SHORT).show()
editText.text.clear()
editText2.text.clear()

listRefresh()
}
}
// Output

button2.setOnClickListener {
listRefresh()
}


}


inner class lstAdp : BaseAdapter() {
override fun getCount(): Int {
return list.size
}

override fun getItem(position: Int): Any? {
return null
}

override fun getItemId(position: Int): Long {
return 0
}

override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {


var view : View? = convertView
if(convertView == null) {
view = layoutInflater.inflate(R.layout.lstlayout, null)
}

var txt1 = view?.findViewById<TextView>(R.id.textView2)
var txt2 = view?.findViewById<TextView>(R.id.textView3)

txt1?.text = "${list[position].name} | ${list[position].pn}"
txt2?.text = "${list[position].idx}"

return view
}
}

fun listRefresh() {
list.removeAll { true }

var valuelistener = object :ValueEventListener {

override fun onCancelled(p0: DatabaseError) {}
override fun onDataChange(p0: DataSnapshot) {

if(p0.exists()) {

for(rt in p0.children) {
var post = rt.getValue(Hero::class.java)
list.add(post!!)

}
}

lstView.adapter = lstAdp()

}

}
ref.addValueEventListener(valuelistener)
}

}