Adapter class
package com.example.breakingblock.roomdb
import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.lifecycle.LiveData
import androidx.recyclerview.widget.RecyclerView
import com.example.breakingblock.databinding.LocalRankingitemBinding
class UserAdapter(private var dataSet: MutableList<user>):RecyclerView.Adapter<UserAdapter.MyViewHolder>() {
class MyViewHolder(val binding : LocalRankingitemBinding) :RecyclerView.ViewHolder(binding.root)
override fun getItemCount() = dataSet.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
return MyViewHolder(LocalRankingitemBinding.inflate(LayoutInflater.from(parent.context),parent,false))
}
fun setList(newList: MutableList<user>) {
this.dataSet = newList
notifyDataSetChanged()
Log.d("UserAdapter", "Data set: $newList")
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val binding = (holder as MyViewHolder).binding
binding.nickname.text=dataSet[position].name
binding.score.text=dataSet[position].score.toString()
}
}
DAO interface
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
@Dao
interface scoreDao {
@Insert
suspend fun insert(user: user): Long
@Query("SELECT * FROM user")
suspend fun selectAll(): MutableList<user>
}
a fraction of main activity
class MainActivity : Activity() {
private lateinit var binding: ActivityMainBinding
private lateinit var gameView: GameView
private var bgmPlayer: MediaPlayer? = null
private lateinit var auth: FirebaseAuth // 파이어베이스 인증 객체
private lateinit var googleSignInClient: GoogleSignInClient // 구글 로그인 클라이언트 객체
private val REQ_SIGN_GOOGLE = 100
private var backPressedTime: Long = 0
private lateinit var db: ScoreDatabase
private lateinit var adapter: UserAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
db = ScoreDatabase.getInstance(applicationContext)
// 파이어베이스 인증 객체 초기화
auth = FirebaseAuth.getInstance()
// 구글 로그인 옵션 설정
val googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()
// 구글 로그인 클라이언트 초기화
googleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions)
// 미디어 플레이어 초기화
bgmPlayer = MediaPlayer.create(this, R.raw.titlemusic)
bgmPlayer?.isLooping = true
// 구글 로그인 버튼 클릭시
binding.btnGoogle.setOnClickListener {
bgmPlayer?.pause()
val intent = googleSignInClient.signInIntent
startActivityForResult(intent, REQ_SIGN_GOOGLE)
}
// 게임 스타트 버튼 클릭시
binding.gamestart.setOnClickListener {
val intent = Intent(this, GameViewActivity::class.java)
startActivity(intent)
}
// 로컬 랭킹 버튼 클릭시
binding.localrank.setOnClickListener {
CoroutineScope(Dispatchers.Main).launch {
adapter = UserAdapter(mutableListOf())
val dialogView = layoutInflater.inflate(R.layout.local_ranking_view, null)
val dialog = AlertDialog.Builder(this@MainActivity)
.setView(dialogView)
.create()
val recyclerView = dialogView.findViewById<RecyclerView>(R.id.localrank_recycler_view)
recyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
recyclerView.addItemDecoration(DividerItemDecoration(this@MainActivity, LinearLayoutManager.VERTICAL))
val userList = withContext(Dispatchers.IO) { db!!.scoreDao().selectAll() }
adapter.setList(userList) // 기존 adapter에 새로운 데이터 목록 설정
recyclerView.adapter = adapter
adapter.notifyDataSetChanged()
dialog.show()
}
}
When I pressed the localrank button, I want to display the data in the roomDB in recylerview, but when I printed the log, there was nothing in the userlist, so what's the reason? It was confirmed through data inspection that the data was inserted correctly. I wonder how I can display the data in roomDB in a recycling review. And I wonder why no data is accepted even though I did select all