首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过kotlin中的匿名内部对象修改外部类

通过kotlin中的匿名内部对象修改外部类
EN

Stack Overflow用户
提问于 2018-01-02 19:51:35
回答 1查看 148关注 0票数 1

我正在用Kotlin写我的第一个Android应用程序。

我要做的是发出一个HTTP请求(Volley),以便获取一些数据,这些数据将被写入对象的属性中。

到目前为止,这是很好的工作,直到截击响应侦听器离开。之后,属性将返回为null。

这是来电者:

代码语言:javascript
复制
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val haiku = Haiku(applicationContext)
        haiku.load() // populates 3 properties (author, body, title)
        haiku.show() // author, body, title are back to null here
    }
}

被叫人:

代码语言:javascript
复制
class Haiku(var context: Context? = null, var title: String? = null, var body: String? = null,
        var author: String? = null) : Parcelable {  // parcelable implementaion left out here


    fun load() {
        val stringRequest = object : StringRequest(Request.Method.GET, EndPoints.URL_GET_HAIKU,
            Response.Listener { response ->
                try {
                    val json = JSONObject(response) // proper payload arrives
                    val haiku = json["haiku"] as JSONObject
                    this@Haiku.title = haiku["title"] as String // all properties look alright here
                    this@Haiku.author = haiku["author"] as String
                    this@Haiku.body = haiku["body"] as String
                } catch (e: JSONException) {
                    Toast.makeText(context, R.string.haiku_not_fetched,
                            Toast.LENGTH_LONG).show()
                }
            },
            Response.ErrorListener { error ->
                Toast.makeText(context, R.string.haiku_not_fetched,
                        Toast.LENGTH_LONG).show()
            }) {
        }
        VolleySingleton.instance?.addToRequestQueue(stringRequest)
    }

    fun show() {  // when called after the load method title, body, author are back to null
        val intent = Intent(context, HaikuDisplayActivity::class.java)
        intent.putExtra(EXTRA_HAIKU, this)
        context!!.startActivity(intent)
    }
}

这可能是对象的作用域的一个问题,但我无法弄清楚为什么arn值不被保留。非常感谢您的任何帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-02 20:12:09

评论中回答了这个问题。当调用show()方法时,HTTP尚未返回。我被调试器搞糊涂了,因为它让我觉得它已经存在了。

谢谢@Chisko

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48066986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档