-
카테고리
-
세부 분야
모바일 앱 개발
-
해결 여부
미해결
리얼타임 데이터베이스의 저장하기,불러오기 부분은 완성 코드가 없나요? ㅠ
23.10.17 23:38 작성 조회수 198
0
package com.android.diet_memo
import android.app.DatePickerDialog
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.widget.Button
import android.widget.DatePicker
import android.widget.EditText
import android.widget.ListView
import androidx.appcompat.app.AlertDialog
import com.android.diet_memo.databinding.ActivityMainBinding
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.ValueEventListener
import com.google.firebase.database.ktx.database
import com.google.firebase.ktx.Firebase
import java.util.Calendar
import java.util.GregorianCalendar
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding // private lateinit var 와 lazy를 쓰는경우 정확히 어떤차이?
val dataModelList = mutableListOf<DataModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val database = Firebase.database
val myRef = database.getReference("시발 개좆같은 fianl")
val listView = findViewById<ListView>(R.id.mainLV)
val adapter_list = ListVeiwAdapter(dataModelList)
listView.adapter = adapter_list
myRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
for (dataModel in snapshot.children) {
Log.d("Data", dataModel.toString())
dataModelList.add(dataModel.getValue(DataModel::class.java)!!)
}
Log.d("DataMoel",dataModelList.toString())
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.writebtn.setOnClickListener {
val mDialogView = LayoutInflater.from(this).inflate(R.layout.custom_dialog, null)
val mBuilder = AlertDialog.Builder(this)
.setView(mDialogView)
.setTitle("운동 메모 다이얼로그")
val mAlertDialog = mBuilder.show()
val DateSelectBtn = mAlertDialog.findViewById<Button>(R.id.dateSelectBtn)
var dateText = "" //dateText 버튼은 변경되니까 var로
DateSelectBtn?.setOnClickListener {
val today = GregorianCalendar()
val year: Int = today.get(Calendar.YEAR)
val month: Int = today.get(Calendar.MONTH)
val date: Int = today.get(Calendar.DATE)
val dlg = DatePickerDialog(this, object : DatePickerDialog.OnDateSetListener {
override fun onDateSet(
view: DatePicker?,
year: Int,
month: Int,
dayOfMonth: Int
) {
Log.d("Main", "${year}, ${month + 1}, ${dayOfMonth}")
DateSelectBtn.setText("${year}, ${month + 1}, ${dayOfMonth}")
dateText = "${year}, ${month + 1}, ${dayOfMonth}" // dateText를 이런식으로 묶음
}
}, year, month, date)
dlg.show()
}
val saveBtn = mAlertDialog.findViewById<Button>(R.id.saveBtn)
saveBtn?.setOnClickListener {
// Write a message to the database
val healMemo = mAlertDialog.findViewById<EditText>(R.id.healthMemo)?.text.toString()
val database = Firebase.database
val myRef = database.getReference("final")
val model = DataModel(dateText, healMemo) //계속 이런식으로 껍데기를 만드는걸 연습해야할듯,,?
myRef.setValue(model)
myRef
.push()
.setValue(model)
mAlertDialog.dismiss()
}
}
}
}
리스트뷰 생성후 어뎁터 연결하는부분 따라치고나서부터 알수없는 에러로,,연결이 되지않습니다42번째 라인
dataModelList.add(dataModel.getValue(DataModel::class.java)!!)
부분에서 오류가 났다고 gpt선생님이 그러시는데.. 잘모르겠습니다.
package com.android.diet_memo
data class DataModel (
val date:String = "",
val memo:String = ""
)
package com.android.diet_memo
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
class ListVeiwAdapter(val List : MutableList<DataModel>) : BaseAdapter() {
override fun getCount(): Int {
return List.size
}
override fun getItem(position: Int): Any {
return List[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var convertView = convertView
if (convertView == null) {
convertView = LayoutInflater.from(parent?.context).inflate(R.layout.listview_item,parent,false)
}
val date = convertView?.findViewById<TextView>(R.id.ListViewDateArea)
val memo = convertView?.findViewById<TextView>(R.id.ListViewMemoArea)
date!!.text = List[position].date
memo!!.text = List[position].memo
Log.d("Test","Date: ${date.text},Memo: ${memo.text}")
return convertView!!
}
}
package com.android.diet_memo
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.util.Log
import android.widget.Toast
import com.android.diet_memo.databinding.ActivityMainBinding
import com.android.diet_memo.databinding.ActivitySplashBinding
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import java.lang.Exception
class Splash : AppCompatActivity() {
private lateinit var binding: ActivitySplashBinding
private lateinit var auth: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySplashBinding.inflate(layoutInflater)
setContentView(binding.root)
auth = Firebase.auth
try {
Log.d("SPLASH", auth.currentUser!!.uid)
Toast.makeText(this,"원래 비회원 로그인이 되어있는 사람입니다",Toast.LENGTH_LONG).show()
// splash 부분
Handler().postDelayed({
startActivity(Intent(this, MainActivity::class.java))
finish()
},3000) // splash 부분(끝)
} catch (e: Exception) {
Log.d("fxxk", "회원가입 시켜줘야함")
//실패하고, 회원가입 시켜줘야하므로 catch 부분에 예외처리를 해주고,익명로그인 창으로 뜨게한다.
auth.signInAnonymously() //firebase 익명로그인 하는 코드 시작부분
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success, update UI with the signed-in user's information
Toast.makeText(this,"비회원 로그인 성공", Toast.LENGTH_LONG).show()
// splash 부분
Handler().postDelayed({
startActivity(Intent(this, MainActivity::class.java))
finish()
},3000) // splash 부분(끝)
} else {
// If sign in fails, display a message to the user.
Toast.makeText(this,"비회원 로그인 실패", Toast.LENGTH_LONG).show()
}
}
}
}
}
클래스파일 전체입니다
답변을 작성해보세요.
0
답변 1