1
votes

I have started to develop an application somehow i got an error in MainActivity.java class and i couldn't identify please help me.Thanks in advance

MainActivity.kt

class MainActivity : AppCompatActivity() {
private lateinit var addNotes: FloatingActionButton
private lateinit var notesRV: RecyclerView
private lateinit var notesList: ArrayList<Notes>
private lateinit var realm: Realm

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

    val todayFragment = TodayFragment()
    val fragment =
        supportFragmentManager.findFragmentByTag(TodayFragment::class.java.simpleName)

    if (fragment !is TodayFragment) {
        supportFragmentManager.beginTransaction()
            .add(R.id.container, todayFragment, TodayFragment::class.java.simpleName)
            .commit()
    }
    Toast.makeText(this, "Welcome to NoteActivity", Toast.LENGTH_SHORT).show()
    //        init views
    addNotes = findViewById(R.id.addNotes)
    notesRV = findViewById(R.id.notesRV)
    //        onclick add notes btn
    addNotes.setOnClickListener{
        startActivity(Intent(this, AddNotesActivity::class.java))
        finish()
    }

    notesRV.layoutManager = StaggeredGridLayoutManager(2, LinearLayoutManager.VERTICAL)
    getAllNotes()
}

private fun getAllNotes() {
    notesList.clear()
    notesList = ArrayList()

    val result: RealmResults<Notes> = realm.where<Notes>(Notes::class.java).findAll()

    notesRV.adapter = NotesAdapter(this, result)
    notesRV.adapter!!.notifyDataSetChanged()
}

fragment note.xml

    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorBackground"
    tools:context=".NoteFragment">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/notesRV"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"/>

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/addNotes"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="25dp"
        android:layout_marginBottom="25dp"
        android:backgroundTint="@color/colorPrimary"
        android:src="@drawable/ic_write_white_create_24dp"
        app:backgroundTint="@color/design_default_color_background"
        app:fabSize="normal"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

This is my logcat

2020-10-19 15:07:58.580 24447-24447/com.d3ifcool.notivity E/AndroidRuntime: FATAL EXCEPTION: main Process: com.d3ifcool.notivity, PID: 24447 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.d3ifcool.notivity/com.d3ifcool.notivity.MainActivity}: java.lang.IllegalStateException: findViewById(R.id.addNotes) must not be null at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3488) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3635) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 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:2175) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:7860) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075) Caused by: java.lang.IllegalStateException: findViewById(R.id.addNotes) must not be null at com.d3ifcool.notivity.MainActivity.onCreate(MainActivity.kt:36) at android.app.Activity.performCreate(Activity.java:7955) at android.app.Activity.performCreate(Activity.java:7944) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3463) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3635)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)  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:2175)  at android.os.Handler.dispatchMessage(Handler.java:107)  at android.os.Looper.loop(Looper.java:237)  at android.app.ActivityThread.main(ActivityThread.java:7860)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)

Help me please

Caused by: java.lang.IllegalStateException: findViewById(R.id.addNotes) must not be null at com.d3ifcool.notivity.MainActivity.onCreate(MainActivity.kt:36)

1
Because R.id.addNotes is in fragment note.xml not in activity_main.xml.ADM
Also, findViewById may return null, so perhaps use RecyclerView? rather than RecyclerView as type?Jeroen Steenbeeke
R.id.addnotes probably is not in the R.layout.activity_main, so you can only reference to your id from your loaded view. If R.id.addnotes is in the fragment layout, you must do the findViewById in your onCreateView fragment, not in your activity.Manuel Mato

1 Answers

0
votes

As you are using kotlin, You really no need findViewById method as we can directly use xml ids to activity.

Remove below lines from activity

 private lateinit var addNotes: FloatingActionButton
 private lateinit var notesRV: RecyclerView

 addNotes = findViewById(R.id.addNotes)
 notesRV = findViewById(R.id.notesRV)