Reputation:
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)
}
Hey guys, I want to create a Twitter Clone but I can't return the changed mTweets variable. I get a response from my server and in the onResponse method mTweets is changed but my function does return an empty string.(Btw. tweetsTemp is just for testing. I will change this later).
Upvotes: 0
Views: 500
Reputation: 2175
You can't return mTweets
because the network call is running asynchronically.
Read more about synchronous and asynchronous requests here: https://futurestud.io/tutorials/retrofit-synchronous-and-asynchronous-requests
Upvotes: 1