简体   繁体   English

extras.getString() 在 Kotlin Android 中返回 null

[英]extras.getString() returns null in Kotlin Android

The result is always return null, I don't know what mistake, I have seen other people problems I am not getting what I need exactly.结果总是返回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?)

myAdapter我的适配器

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")

        }
    }
}

my 2Activity can have code like this, and trying to get that string extra in another activity but is returning null?我的 2Activity 可以有这样的代码,并试图在另一个活动中获得额外的字符串但返回 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")

        }

I tried by replacing我尝试更换

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

also still it is returning null?它还返回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: -->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

Try replacing this尝试更换这个

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])

With this有了这个

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

You have already have the string, just put it in the extras.您已经有了字符串,只需将其放在附加内容中即可。

Please just try the below line of code to update and check in your PrayerActivity, for this you can create one interface callback and call interface method(varargs with multiple params or string or pojo class) from adapter class where you are opening intent currently, then from PrayerActivity activity you can open it请尝试以下代码行来更新和检查您的 PrayerActivity,为此您可以创建一个接口回调并从您当前打开意图的适配器类调用接口方法(具有多个参数或字符串或 pojo 类的可变参数),然后从 PrayerActivity 活动中,您可以打开它

 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])

startActivity(intent)开始活动(意图)

hope it may help you希望它可以帮助你

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM