【问题标题】:Get string extra from activity Kotlin从活动 Kotlin 中获取额外的字符串
【发布时间】:2017-07-16 19:49:44
【问题描述】:

我想从意图中获取另一个活动中的额外字符串。这是创建我的意图的方式

        val intent = Intent(this, Main2Activity::class.java)
        intent.putExtra("samplename", "abd")
        startActivity(intent)

如何在另一个活动中获取此意图的价值

【问题讨论】:

  • 你可以从Intent的另一个活动中得到它,例如:activity.intent.getExtraString("samplename")
  • 在另一个活动中?是Main2Activity 还是任何活动?
  • 意图转到 Main2Activity
  • 您想从Main2Activity 或其他类中获取samplename 吗?
  • 这个intent在MainActivity中,我想做的是创建intent,并在Main2Activity中获取额外的字符串

标签: android kotlin


【解决方案1】:

答案找到了,在下一个活动中,你必须这样做才能得到字符串:

val ss:String = intent.getStringExtra("samplename").toString()

【讨论】:

  • 什么是“勇气”?
  • 已编辑。更改了 StringExtra 的名称
  • 相当于intent.extras.getString("samplename")?
  • 是的,没错。 samplename 这是我用来识别此意图并在下一个活动中捕获该值的名称。很抱歉造成混乱
  • 如果你没有声明它,你怎么能从以前的值调用意图?
【解决方案2】:

加载

val value: String = txt_act_main.text.toString() // or just your string
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("value", value)
startActivity(intent)

//选项2所有内部类都应该实现为Serializable

   getIntent().putExtra("complexObject", clickedTitle);

获取

var bundle :Bundle ?=intent.extras
var message = bundle!!.getString("value") // 1
var strUser: String = intent.getStringExtra("value") // 2
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

//选项2

 var myProg = intent.getSerializableExtra("complexObject") as MenuModel

隐式(与其他应用共享)

val value: String = txt_act_main.text.toString()
var intent = Intent()
intent.action = Intent.ACTION_SEND
intent.putExtra(Intent.EXTRA_TEXT, value)
intent.type="text/plain"
startActivity(Intent.createChooser(intent,"Share to "))

【讨论】:

    【解决方案3】:

    您可以检查意图值是否为空

    val bundle :Bundle ?=intent.extras
        if (bundle!=null){
            val message = bundle.getString("object") // 1
    
            Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    
        }
    

    【讨论】:

      【解决方案4】:

      可以使用这个代码:

      val bundle = intent.extras
      var sampleName: String = ""
      if (bundle != null) {
          sampleName = bundle.getString("samplename")
      }
      

      【讨论】:

        【解决方案5】:

        接受的答案并不能解决意图不存在的情况。因为当密钥在意图中不存在时,getStringExtra() 会给你null,即使它的签名指示String 而不是String?

        您可以使用val text:String = intent.getStringExtra(intentKey) ?: "" 确保没有发生 NPE。

        这里还有一个答案:

        这是针对这种情况,您尝试从意图中检索字符串,如果该值存在,我们将获取该值,否则,它将返回上一个屏幕,因为此意图很关键。会发生一些错误,但我们不想让活动崩溃。

        private fun getStringFromIntentOrShowError(intentKey: String):String {
            val text:String? = intent.getStringExtra(intentKey)
        
            if (text == null) {
                showDialog(
                    "Error", 
                    "No $intentKey found"
                ) {
                    it.dismiss()
                    finish()
                }
                return ""
            }
        
            return text
        }
        
        // I use anko to show a dialog, you can use your one.
        private fun showDialog(
            title:String,
            message:String,
            yesButtonCallback: (d:DialogInterface) -> Unit
        ) {
            alert(message, title){ yesButton{
                    yesButtonCallback(it)
            } }.show()
        }
        

        那么你可以这样使用它:

        val text:String = getStringFromIntentOrShowError("asd")
        

        文本总是有一个值

        【讨论】:

          【解决方案6】:

          在 Main2Activity 中你可以有这样的代码:

              val intent = getIntent();
              val myValue = intent.getStringExtra("key")
              Log.d(TAG,"myValue"+myValue)
          

          【讨论】:

            【解决方案7】:

            你可以使用这个简单的 Kotlin 扩展

            fun Intent.getData(key: String): String {
                return extras?.getString(key) ?: "intent is null"
            }
            

            这个扩展检查intent的值是否为null,如果值为null则返回intent为null否则返回值

            这样使用

            val username = intent.getData("username")
            

            【讨论】:

              【解决方案8】:

              首先您需要初始化意图变量。 然后像我们在java中一样取出数据:)

              val intent: Intent = intent
              var data = intent.getStringExtra("mydata")
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-01-02
                • 1970-01-01
                相关资源
                最近更新 更多