我的应用程序在尝试在文件夹上添加 onClick 侦听器时崩溃

My app crash while try to adding onClick listener on folder

提问人:Dhruv Modi 提问时间:8/6/2023 最后编辑:Dhruv Modi 更新时间:8/6/2023 访问量:24

问:

当我尝试在代码中的文件夹上添加 onClick 侦听器时,我收到 NullPointerException 错误和我的应用程序崩溃。我获取所有数据,我尝试了很多事情,但我得到了错误。我试图添加安全调用(?)和非null(!!),我添加了条件,但没有任何效果。我还授予所有权限: 引起:

java.lang.NullPointerException

com.example.filemanager.Fragments.InternalFragment.findFile(InternalFragment.kt:78)
com.example.filemanager.Fragments.InternalFragment.displayFiles(InternalFragment.kt:91)
com.example.filemanager.Fragments.InternalFragment.access$displayFiles(InternalFragment.kt:22)
com.example.filemanager.Fragments.InternalFragment$runtimePermission$1.onPermissionsChecked(InternalFragment.kt:60)

这是我的代码


import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.filemanager.Adapter.FileAdapter
import com.example.filemanager.FileSelectedListener
import com.example.filemanager.R
import com.karumi.dexter.Dexter
import com.karumi.dexter.MultiplePermissionsReport
import com.karumi.dexter.PermissionToken
import com.karumi.dexter.listener.multi.MultiplePermissionsListener
import java.io.File
import java.lang.Exception


class InternalFragment : Fragment(), FileSelectedListener {

    private lateinit var recycler: RecyclerView
    private lateinit var fileList: ArrayList<File>
    private lateinit var storage: File
    private lateinit var fileAdapter: FileAdapter
    private lateinit var data: String

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?,
    ): View? {
        // Inflate the layout for this fragment

        val view = inflater.inflate(R.layout.fragment_internal, container, false)
        runtimePermission()
        recycler = view.findViewById(R.id.rvInternal)

        val internalStorage: String? = System.getenv("EXTERNAL_STORAGE")
        storage = File(internalStorage.toString())

        try {
            data = arguments?.getString("path") ?: toString()
            val file: File = File(data)
            storage = file
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return view
    }

    private fun runtimePermission() {
        Dexter.withContext(context).withPermissions(
            android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
            android.Manifest.permission.READ_EXTERNAL_STORAGE
        ).withListener(object : MultiplePermissionsListener {
            override fun onPermissionsChecked(report: MultiplePermissionsReport) {
                if (isAdded) { // Check if the fragment is added before calling displayFiles()
                    displayFiles()
                }
            }

            override fun onPermissionRationaleShouldBeShown(
                list: MutableList<com.karumi.dexter.listener.PermissionRequest>?,
                permissionToken: PermissionToken?,
            ) {
                permissionToken?.continuePermissionRequest()
            }
        }).check();
    }

    private fun findFile(file: File?): ArrayList<File> {

        val arrayList: ArrayList<File> = ArrayList()
        val files = file!!.listFiles()

        for (singleFile in files!!) {
            if (singleFile.isDirectory && !singleFile.isHidden) {
                arrayList.add(singleFile)
            }
        }
        return arrayList
    }

    private fun displayFiles() {
        recycler.setHasFixedSize(true)
        val layoutManager = LinearLayoutManager(requireContext())
        recycler.layoutManager = layoutManager
        fileList = ArrayList()
        fileList.addAll(findFile(storage))
        fileAdapter = FileAdapter(requireContext(), fileList, this)
        recycler.adapter = fileAdapter
    }

    override fun onFileClicked(file: File) {
        if (file.isDirectory) {
            val bundle: Bundle = Bundle()
            bundle.putString("path", file.absolutePath)

            val internalFragment: InternalFragment = InternalFragment()
            internalFragment.arguments = bundle
            fragmentManager?.beginTransaction()?.replace(R.id.fragment_container, internalFragment)
                ?.addToBackStack(null)?.commit();
        }
    }

    override fun onFileLongClicked(file: File) {
    }
}
Android Kotlin NullPointerException 存储

评论


答: 暂无答案