【发布时间】:2021-10-11 03:41:57
【问题描述】:
我需要从我的主要活动开始一个活动,第二个活动必须进行 REST 调用(我正在使用 OkHttp)并将结果返回给主要活动。我实际上能够完成所有过程,但是当我回到主要活动时,我无法获得结果数据。代码如下:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
val data: Intent? = result.data
Log.d("Main", data.toString())
}
findViewById<Button>(R.id.button).setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
resultLauncher.launch(intent)
}
}
}
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.second_activity)
customFunction(this)
}
private fun customFunction(activity: Activity) {
var json: String? = ""
val payload = "custom payload"
val okHttpClient = OkHttpClient()
val requestBody = payload.toRequestBody()
val request = Request.Builder()
.header("Authorization", "Basic mytoken")
.header("Content-Type", "application/x-www-form-urlencoded")
.url("myurl")
.method("POST", requestBody)
.build()
okHttpClient.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
Log.d("SecondActivity", "onFailure")
activity.finish()
}
override fun onResponse(call: Call, response: Response) {
json = response.body?.string()
Log.d("SecondActivity", "$json")
val data = Intent()
data.putExtra("json", json)
Log.d("SecondActivity", data.toString())
activity.setResult(Activity.RESULT_OK, data)
activity.finish()
}
})
}
}
所以,在customFunction() 中,我能够获取该json 并将其放入数据意图中。事实上,当我用Log.d() 打印它时,它会显示Intent { (has extras) },所以没关系。但是当我在 registerForActivityResult 的 MainActivity 中收到它时,它会打印出 null。我做错了什么?
【问题讨论】:
标签: android rest kotlin asynchronous okhttp