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仅用于测试。我稍后会更改它。)
答案 0 :(得分:1)
您无法返回mTweets
,因为网络呼叫是异步运行的。
在此处阅读有关同步和异步请求的更多信息:https://futurestud.io/tutorials/retrofit-synchronous-and-asynchronous-requests