I want to show the data in the roomDB in the recyclerview, but it is impossible to import the data

21 Views Asked by At

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

0

There are 0 best solutions below