My application is crashing automatically. whats wrong with this?
i am working on music player application and its look everything perfect but somewhere the code is not matching properly and its crashing every time.
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var toggle: ActionBarDrawerToggle
private lateinit var musicAdapter: MusicAdapter
companion object{
var MusicListMA :ArrayList<MusicData> = ArrayList()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//This function holds all the initialisation splash,navigation,adapter for music etc
initializeLayout()
//this all hold function of calling onClicked method for button
shuffleButtonFunc()
favoriteButtonFunc()
playListButtonFunc()
naveViewFunc()
}
private fun playListButtonFunc() {
binding.playListButton.setOnClickListener(){
Toast.makeText(this, "playlist clicked", Toast.LENGTH_SHORT).show()
val intent = Intent(this,PlaylistActivity::class.java)
startActivity(intent)
}
}
private fun favoriteButtonFunc() {
binding.favoriteButton.setOnClickListener(){
Toast.makeText(this, "favorite clicked", Toast.LENGTH_SHORT).show()
val intent = Intent(this,FavoriteActivity::class.java)
startActivity(intent)
}
}
private fun shuffleButtonFunc() {
binding.shuffleButton.setOnClickListener() {
Toast.makeText(this, "shuffle clicked", Toast.LENGTH_SHORT).show()
val intent = Intent(this,PlayerActivity::class.java)
startActivity(intent)
}
}
private fun naveViewFunc(){
binding.naveView.setNavigationItemSelectedListener(){
when(it.itemId){
R.id.about_nave -> Toast.makeText(baseContext,"about nave clicked",Toast.LENGTH_SHORT).show()
R.id.setting_nave -> Toast.makeText(this,"setting nave clicked",Toast.LENGTH_SHORT).show()
R.id.feedback_nave -> Toast.makeText(this,"feedback nave clicked",Toast.LENGTH_SHORT).show()
R.id.exit_nave -> exitProcess( 1)
}
true
}
}
//permission request runtime
private fun requestRuntimePermission(){
if (ActivityCompat.checkSelfPermission(this,android.Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),13)
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray)
{
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode==13){
if (grantResults.isEmpty() && grantResults[0]==PackageManager.PERMISSION_GRANTED){
Toast.makeText(this,"permission granted access",Toast.LENGTH_SHORT).show()
}
else
ActivityCompat.requestPermissions(this, arrayOf(WRITE_EXTERNAL_STORAGE),13) //if not request runtime
}
}
// action drawerBar navigation override to display in app
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (toggle.onOptionsItemSelected(item))
return true
return super.onOptionsItemSelected(item)
}
//starting required code collected into this function inorder to look clean oncreat method
private fun initializeLayout(){
//RUNTIME REQUEST PERMISSION FUNCTION CALLING
requestRuntimePermission()
setTheme(R.style.splash_screen_style)
//for navigation side Bar drawer
toggle = ActionBarDrawerToggle(this,binding.root,R.string.open,R.string.close)
binding.root.addDrawerListener(toggle)
toggle.syncState()
supportActionBar?.setDisplayHomeAsUpEnabled(true)
MusicListMA = getAllAudio()
binding.musicRV.setHasFixedSize(true) //set fix size to save memory
binding.musicRV.setItemViewCacheSize(13)
binding.musicRV.layoutManager = LinearLayoutManager(this@MainActivity)
musicAdapter = MusicAdapter(this@MainActivity, MusicListMA)
binding.musicRV.adapter = musicAdapter
binding.totalSong.text = "Total Song : "+musicAdapter.itemCount
}
@SuppressLint("Range")
private fun getAllAudio():ArrayList<MusicData>{
val tempList = ArrayList<MusicData>()
val selection = MediaStore.Audio.Media.IS_MUSIC + "!=0"
val projection = arrayOf(MediaStore.Audio.Media._ID,MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.ARTIST,MediaStore.Audio.Media.DURATION,MediaStore.Audio.Media.DATE_ADDED,MediaStore.Audio.Media.DATA)
val cursor = this.contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection,selection,null,
MediaStore.Audio.Media.DATE_ADDED + "DEC", null)
if (cursor != null)
if (cursor.moveToFirst())
do{
val titleC = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE))
val idC = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID))
val albumC = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM))
val artistC = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST))
val pathC = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA))
val durationC = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION))
val music = MusicData(id = idC, title = titleC, album = albumC, artist = artistC, duration = durationC, path = pathC)
val file = File(music.path)
if (file.exists()){
tempList.add(music)
}
}while (cursor.moveToNext())
cursor?.close()
return tempList
}
}
Logcat Detection
2021-12-27 11:03:12.641 21712-21712/? E/ample.musicvib: Unknown bits set in runtime_flags: 0x8000
2021-12-27 11:03:12.641 21712-21712/? E/ample.musicvib: Unknown bits set in runtime_flags: 0x8000
2021-12-27 11:03:12.641 21712-21712/? E/ample.musicvib: Unknown bits set in runtime_flags: 0x8000
2021-12-27 11:03:15.809 21712-21712/com.example.musicvibe E/libc: Access denied finding property "ro.vendor.df.effect.conflict"
2021-12-27 11:03:17.768 21712-21712/com.example.musicvibe E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.musicvibe, PID: 21712
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.musicvibe/com.example.musicvibe.MainActivity}: android.database.sqlite.SQLiteException: no such column: date_addedDEC (code 1 SQLITE_ERROR): , while compiling: SELECT _id, title, album, artist, duration, date_added, _data FROM audio WHERE ((owner_package_name IN ( 'com.example.musicvibe' ) OR is_ringtone=1 OR is_alarm=1 OR is_notification=1) AND (is_pending=0) AND (is_trashed=0) AND (volume_name IN ( 'external_primary' , '44c7-3e99' ))) AND (is_music!=0) ORDER BY date_addedDEC
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3310)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3459)
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:2046)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:225)
at android.app.ActivityThread.main(ActivityThread.java:7564)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: android.database.sqlite.SQLiteException: no such column: date_addedDEC (code 1 SQLITE_ERROR): , while compiling: SELECT _id, title, album, artist, duration, date_added, _data FROM audio WHERE ((owner_package_name IN ( 'com.example.musicvibe' ) OR is_ringtone=1 OR is_alarm=1 OR is_notification=1) AND (is_pending=0) AND (is_trashed=0) AND (volume_name IN ( 'external_primary' , '44c7-3e99' ))) AND (is_music!=0) ORDER BY date_addedDEC
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:184)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:423)
at android.content.ContentResolver.query(ContentResolver.java:946)
at android.content.ContentResolver.query(ContentResolver.java:881)
at com.example.musicvibe.MainActivity.getAllAudio(MainActivity.kt:147)
at com.example.musicvibe.MainActivity.initializeLayout(MainActivity.kt:129)
at com.example.musicvibe.MainActivity.onCreate(MainActivity.kt:40)
at android.app.Activity.performCreate(Activity.java:7916)
at android.app.Activity.performCreate(Activity.java:7903)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3285)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3459)
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:2046)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:225)
at android.app.ActivityThread.main(ActivityThread.java:7564)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
MusicData class
package com.example.musicvibe
data class MusicData(
val id:String,
val title:String,
val album:String,
val artist: String,
val duration:Long=0,
val path:String
)