Home > Mobile >  Suggestions on fixing this error in recyclerviewcode
Suggestions on fixing this error in recyclerviewcode

Time:08-11

    package com.example.itunes_mysia

 import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
 import android.widget.TextView
    import androidx.recyclerview.widget.GridLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import androidx.viewpager.widget.ViewPager
    import com.example.itunes_mysia.databinding.ActivityMainBinding
    import com.google.android.material.tabs.TabLayout
 import java.io.IOException
import java.nio.charset.Charset

class MainActivity : AppCompatActivity() {
     private lateinit var itunesToolbar: androidx.appcompat.widget.Toolbar
        private lateinit var itunesTabs: TabLayout
        private lateinit var itunesTitleText: TextView
        private lateinit var itunesViewPager: ViewPager
     private lateinit var itunesPagerAdapters: PagerAdapters
     private var artistName: ArrayList<String> = ArrayList()
        var songName: ArrayList<String> = ArrayList()
        var previewUrl: ArrayList<String> = ArrayList()
        var artworkUrl60: ArrayList<String> = ArrayList()
     var trackPrice: ArrayList<String> = ArrayList()
        private lateinit var binding: ActivityMainBinding
        override fun onCreate(savedInstanceState: Bundle?) {
             super.onCreate(savedInstanceState)
                binding = ActivityMainBinding.inflate(layoutInflater)
                setContentView(binding.root)

            populateMusic()

            // ***GETTING ERROR HERE***
          val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
            val mainActivity = this
            recyclerView.apply {
         layoutManager = GridLayoutManager(applicationContext, 1)
            adapter = CardAdapter(musicList)
        }


            /** title = "KotlinApp"
            val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
            val linearLayoutManager = LinearLayoutManager(applicationContext)
            recyclerView.layoutManager = linearLayoutManager
            try {
            val obj = JSONObject(loadJSONFromAsset())
         val userArray = obj.getJSONArray("results")
         for (i in 0 until userArray.length()) {
            val songDetail = userArray.getJSONObject(i)
            artistName.add(songDetail.getString("Artist Name"))
            songName.add(songDetail.getString("Song Name"))
          previewUrl.add(songDetail.getString("Song URL"))
          artworkUrl60.add(songDetail.getString("Album Cover"))
            trackPrice.add(songDetail.getString("Track Price"))
            }
            } catch (e: JSONException)
            {
         e.printStackTrace()
         }
            val customAdapter =
         CustomAdapter(this@MainActivity, artistName, songName, previewUrl, artworkUrl60, trackPrice)
            recyclerView.adapter = customAdapter **/
         // Set find ID
            itunesToolbar = findViewById(R.id.itunesToolbar)
         itunesTitleText = findViewById(R.id.itunesTitleText)
         itunesTabs = findViewById(R.id.itunesTabs)
         itunesViewPager = findViewById(R.id.itunesViewPager)
            itunesPagerAdapters = PagerAdapters(supportFragmentManager)
            // Set Toolbar
            itunesToolbar.setTitle("")
         itunesTitleText.setText(getString(R.string.itunes))
         setSupportActionBar(findViewById(R.id.itunesToolbar))
            // Set Fragment List
            itunesPagerAdapters.addfragment(RockFragment(), "Rock")
         itunesPagerAdapters.addfragment(ClassicFragment(), "Classic")
         itunesPagerAdapters.addfragment(PopFragment(), "Pop")
         // Set View Pager Adapter
         itunesViewPager.adapter = itunesPagerAdapters
            // Set Tab Layout with View Pager Adapter
            itunesTabs.setupWithViewPager(itunesViewPager)
        // Set Icons
            itunesTabs.getTabAt(0)!!.setIcon(R.mipmap.music1)
         itunesTabs.getTabAt(1)!!.setIcon(R.mipmap.music2)
         itunesTabs.getTabAt(2)!!.setIcon(R.mipmap.music3)

            itunesTabs!!.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
            override fun onTabSelected(tab: TabLayout.Tab) {
             itunesViewPager!!.currentItem = tab.position
         }

         override fun onTabUnselected(tab: TabLayout.Tab) {

         }

              override fun onTabReselected(tab: TabLayout.Tab) {

            }
         })

        }

        private fun populateMusic() {
         val song1 = Music(

            "Journey",
            "Don't Stop Believin'",
         "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview125/v4/e4/6c/ad/e46cad13-317a-3074-8d0f-a41af0bb2437/mzaf_5207796602846861401.plus.aac.p.m4a",
            R.drawable.song1,
         1.99
            )
         musicList.add(song1)
        }

        private fun loadJSONFromAsset(): String {
         val json: String?
          try {
            val inputStream = assets.open("rock.json")
         val size = inputStream.available()
            val buffer = ByteArray(size)
            val charset: Charset = Charsets.UTF_8
         inputStream.read(buffer)
            inputStream.close()
         json = String(buffer, charset)
            return json
            } catch (ex: IOException) {
         ex.printStackTrace()
            return ""

          }
        }

    }

ERROR: 2022-08-11 08:59:29.090 4804-4804/com.example.itunes_mysia E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.itunes_mysia, PID: 4804 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.itunes_mysia/com.example.itunes_mysia.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setLayoutManager(androidx.recyclerview.widget.RecyclerView$LayoutManager)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3835) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4011) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2325) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:246) at android.app.ActivityThread.main(ActivityThread.java:8633) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setLayoutManager(androidx.recyclerview.widget.RecyclerView$LayoutManager)' on a null object reference at com.example.itunes_mysia.MainActivity.onCreate(MainActivity.kt:40) at android.app.Activity.performCreate(Activity.java:8207) at android.app.Activity.performCreate(Activity.java:8191) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3808) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4011)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2325)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:246)  at android.app.ActivityThread.main(ActivityThread.java:8633)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 

CodePudding user response:

Try this

val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
recyclerView.layoutManager = GridLayoutManager(this, 1, GridLayoutManager.YOUR_ORIENTATION, false)

The error is caused because the app seems not to find the recyclerview or the layoutmanager is not properly set.

EDIT
After better looking at your code I saw you are using binding so .findViewById is not perfect, try using binding.recycler_view also

CodePudding user response:

wrong code, you use binding, so to access your recycler view just use:

binding.recyclerView

no need to use findViewById

  • Related