如何从kotlin中的匿名类实现更改全局变量

时间:2018-01-14 19:27:29

标签: android kotlin retrofit

fun loadTweets(uid: Int) : Observable<ArrayList<Tweet>> {
    var tweets: ArrayList<Tweet> = ArrayList<Tweet>()

    val builder: Retrofit.Builder = Retrofit.Builder()
            .baseUrl(NetworkContract.SERVER_URL)
            .addConverterFactory(GsonConverterFactory.create())
    val retrofit: Retrofit = builder.build()

    val userService: UserService = retrofit.create(UserService::class.java)

    val call: Call<List<Tweet>> = userService.loadTweets(uid)

    call.enqueue(object: Callback<List<Tweet>>{
        override fun onResponse(call: Call<List<Tweet>>?, response: Response<List<Tweet>>?) {
            if(response!!.isSuccessful){
                val tweetsTemp: ArrayList<Tweet> = ArrayList<Tweet>()

                tweetsTemp.add(Tweet("Test!", "Tom"))
                mTweets = tweetsTemp
            }
        }
        override fun onFailure(call: Call<List<Tweet>>?, t: Throwable?) {
        }

    })

    return Observable.just(this.mTweets)
}

嘿伙计们,我想创建一个Twitter Clone,但我无法返回已更改的mTweets变量。我收到了来自我的服务器的响应,并且在onResponse方法中mTweets被更改了但我的函数确实返回了一个空字符串。(顺便说一下.tweetsTemp仅用于测试。我稍后会更改它。)

1 个答案:

答案 0 :(得分:1)

您无法返回mTweets,因为网络呼叫是异步运行的。

在此处阅读有关同步和异步请求的更多信息:https://futurestud.io/tutorials/retrofit-synchronous-and-asynchronous-requests