extras.getString() returns Kotlin 中为 null Android

extras.getString() returns null in Kotlin Android

结果总是return null,我不知道什么错误,我看到其他人的问题我没有得到我需要的东西。

class DatabaseLists(private val context: Context?) {
    private lateinit var database: SQLiteDatabase

    val getPrayerContentList: ArrayList<PrayerModel>
        @SuppressLint("Recycle")
        get() {
            database = DatabaseOpenHelper(context).readableDatabase
            val cursor: Cursor = database.query(
                "table_prayer",
                null,
                null,
                null,
                null,
                null,
                null,
                null
            )

            val contentList = ArrayList<PrayerModel>()
            if (cursor.moveToFirst()) {
                while (!cursor.isAfterLast) {
                    val contents = PrayerModel(
                        cursor.getString(cursor.getColumnIndex("prayer_name")),
                        cursor.getString(cursor.getColumnIndex("ayah_name")),
                        cursor.getString(cursor.getColumnIndex("arabic")),
                        cursor.getString(cursor.getColumnIndex("latin")),
                        cursor.getString(cursor.getColumnIndex("translate")),
                        cursor.getString(cursor.getColumnIndex("description"))
                    )
                    contentList.add(contents)
                    cursor.moveToNext()
                    if (cursor.isClosed) {
                        cursor.close()
                    }
                }
            }
            return contentList
        }

class PrayerActivity : AppCompatActivity(), MainContract.MainView {

    private lateinit var binding: ActivityPrayerBinding
    private var database: SQLiteDatabase? = null
    private lateinit var preferences: SharedPreferences
    private lateinit var editor: SharedPreferences.Editor
    lateinit var carlist: ArrayList<PrayerModel>
    private lateinit var prayerContentList: MutableList<PrayerModel>
    private lateinit var prayerAdapter: PrayerAdapter
    private lateinit var mainPresenterImpl: MainPresenterImpl

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = DataBindingUtil.setContentView(this, R.layout.activity_prayer)

        setSupportActionBar(binding.toolbar)
 
        preferences = PreferenceManager.getDefaultSharedPreferences(this)
        editor = preferences.edit()

        PreferenceManager.getDefaultSharedPreferences(this)
        database = DatabaseOpenHelper(this).readableDatabase
        prayerContentList = DatabaseLists(this).getPrayerContentList

        mainPresenterImpl = MainPresenterImpl(this, this)
        initMainContent()

    }

    override fun initMainContent() {
             val verticalLayout = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
             binding.rvMainContent.layoutManager = verticalLayout
             prayerAdapter = PrayerAdapter(this, prayerContentList)
             binding.rvMainContent.adapter = prayerAdapter
    }

}
data class PrayerModel  (
    val strPrayerName: String?,
    val strAyahName: String?,
    val strContentArabic: String?,
    val strContentLatin: String?,
    val strContentTranslation: String?,
    val strContentDescription: String?)

我的适配器

class PrayerAdapter(context: Context, private val prayerContentList: MutableList<PrayerModel>) :
    RecyclerView.Adapter<PrayerViewHolder>() {

    private val context: Context? = null
    private val inflater = LayoutInflater.from(context)
    private var currentIndex: Int = -1

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PrayerViewHolder {
        return PrayerViewHolder(inflater.inflate(R.layout.item_prayer_content, parent, false))
    }

    override fun getItemCount(): Int {
        return prayerContentList.size
    }

    override fun onBindViewHolder(holder: PrayerViewHolder, position: Int) {
        val strContentArabic = prayerContentList[position].strContentArabic
        val strContentLatin = prayerContentList[position].strContentLatin
        val strContentTranslation = prayerContentList[position].strContentTranslation
        val strContentDescription = prayerContentList[position].strContentDescription

        val strPrayerName = prayerContentList[position].strPrayerName
        val strAyahName = prayerContentList[position].strAyahName

        holder.tvContentPrayerName.text = strPrayerName
        holder.tvContentAyahName.text = strAyahName

        holder.itemView.setOnClickListener { v ->

            val context: Context = v.context
            val intent = Intent(context, PrayerReadActivity::class.java)

            intent.putExtra("ARABIC_TEXT", strContentArabic?.get(position))
            intent.putExtra("LATIN_TEXT", strContentLatin!![position])
            intent.putExtra("TRANSLATION_TEXT", strContentTranslation!![position])
            intent.putExtra("DESCRIPTION_TEXT", strContentDescription!![position])

            context.startActivity(intent)
            Log.d(TAG, "-->name = $strContentArabic")

        }
    }
}

我的 2Activity 可以有这样的代码,并试图在另一个 activity 中获取额外的字符串,但是 returning null?

class PrayerReadActivity() : AppCompatActivity() {

    private var database: SQLiteDatabase? = null
    private lateinit var prayerContentList: MutableList<PrayerModel>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_prayer_read)

        LockOrientation(this).lock()

        PreferenceManager.getDefaultSharedPreferences(this)

        database = DatabaseOpenHelper(this).readableDatabase
        prayerContentList = DatabaseLists(this).getPrayerContentList


        val extras = intent.extras
        if (null != extras) {
            val arabic = extras.getString("ARABIC_TEXT").toString()
            val latin = extras.getString("LATIN_TEXT").toString()
            val translation = extras.getString("TRANSLATION_TEXT").toString()
            val description = extras.getString("DESCRIPTION_TEXT").toString()
            Log.d(ContentValues.TAG, "-->arabic = $arabic")

            tvContentArabic2.text = arabic
            tvContentLatin2.text = latin
            tvContentTranslation2.text = translation
            tvContentDescription2.text = description

            Log.d(ContentValues.TAG, "-->arabic = $arabic")
            Log.d(ContentValues.TAG, "-->latin = $latin")
            Log.d(ContentValues.TAG, "-->translation = $translation")
            Log.d(ContentValues.TAG, "-->description = $description")

        }

我尝试通过替换

val arabic = intent.getStringExtra("ARABIC_TEXT").toString()

它还是return空的?

2021-07-22 22:31:16.411 9607-9607/com.example.yasiin D/ContentValues: -->arabic = null
2021-07-22 22:31:16.411 9607-9607/com.example.yasiin D/ContentValues: -->arabic = null
2021-07-22 22:31:16.411 9607-9607/com.example.yasiin D/ContentValues: -->latin = null
2021-07-22 22:31:16.411 9607-9607/com.example.yasiin D/ContentValues: -->translation = null
2021-07-22 22:31:16.411 9607-9607/com.example.yasiin D/ContentValues: -->description = null

尝试替换这个

intent.putExtra("ARABIC_TEXT", strContentArabic?.get(position))
intent.putExtra("LATIN_TEXT", strContentLatin!![position])
intent.putExtra("TRANSLATION_TEXT", strContentTranslation!![position])
intent.putExtra("DESCRIPTION_TEXT", strContentDescription!![position])

有了这个

intent.putExtra("ARABIC_TEXT", strContentArabic)
intent.putExtra("LATIN_TEXT", strContentLatin)
intent.putExtra("TRANSLATION_TEXT", strContentTranslation)
intent.putExtra("DESCRIPTION_TEXT", strContentDescription)

你已经有字符串了,把它放在extras里就可以了

请尝试下面的代码行来更新和检查您的 PrayerActivity,为此您可以创建一个接口回调并从适配器调用接口方法(具有多个参数的可变参数或字符串或 pojo class) class 您当前打开意向的位置,然后从 PrayerActivity activity 您可以打开它

 val intent = Intent(this@PrayerActivity, PrayerReadActivity::class.java)
 intent.putExtra("ARABIC_TEXT", strContentArabic?.get(position))
 intent.putExtra("LATIN_TEXT", strContentLatin!![position])
 intent.putExtra("TRANSLATION_TEXT", strContentTranslation!![position])
 intent.putExtra("DESCRIPTION_TEXT", strContentDescription!![position])

开始活动(意图)

希望对您有所帮助