Я видел много ответов по теме, но ни одного не достаточно для того, что я хочу.
Я хочу иметь возможность вернуть ответ, подобный списку, из ответа залпа и передать этот список другому классу. чтобы быть добавленным в мою базу данных.
Я пытался использовать интерфейс и функцию обратного вызова, но ответ по-прежнему зависает в другом интерфейсе.
Я хочу что-то вроде этого
class Big:Interface{
override fun A():List<Model> = getResponseFromVolley()
fun getResponseFromVolley(){ setUp Volley request return List}
}
How can I do this
код
class RemoteDataSourceManager: ServiceCall {
override suspend fun getMovies(context: Context): Result<List<MovieEntity>> {
var results: Result<List<MovieEntity>>
getRemoteMovies(context, object : VolleyCallBack{
override fun onResponse(result: Result<List<MovieEntity>>): Result<List<MovieEntity>> {
results = result
return results
}
})
return results //result mustbe initialized
}
private fun getRemoteMovies(context: Context, callBack: VolleyCallBack): Result<List<MovieEntity>> {
val responseBool = MutableLiveData<Boolean>(false)
var listResult: Result<List<MovieEntity>>
val listOfMovies = ArrayList<MovieEntity>()
val url =
"https://api.themoviedb.org/3/movie/popular?api_key=f1e256985ebc2be710bf1f4ed754da11&language=en-US&page=1"
val request: JsonObjectRequest =
JsonObjectRequest(
Request.Method.GET,
url, null,
Response.Listener { response ->
try {
val results = response.getJSONArray("results")
val size = results.length()
var title = ""
var movieImage = ""
var rating = 0
var overView = ""
var releaseDate = ""
var movieId = ""
for (movie in 0 until results.length()) {
val eachMovie = results.getJSONObject(movie)
movieImage = "https://image.tmdb.org/t/p/w500"
title = eachMovie.getString("title")
movieImage +=eachMovie.getString("poster_path")
rating = eachMovie.getInt("vote_average")
overView = eachMovie.getString("overview")
releaseDate = eachMovie.getString("release_date")
movieId = eachMovie.getInt("id").toString()
val newMovie = MovieEntity(
title,
movieImage,
rating,
overView,
releaseDate
)
newMovie.movieId = movieId
newMovie.id = movieId.toInt()
listOfMovies.add(newMovie)
responseBool.value = true
}
listResult = getResult(Result.Success(listOfMovies.toList()))
callBack.onResponse(listResult)
Log.i("insideList", "$listOfMovies")
} catch (e: Exception) {
Log.i("error", "Response $e")
// Toast.makeText(context!!.applicationContext, "No activity", Toast.LENGTH_SHORT).show()
}
}, Response.ErrorListener { error ->
val errroMessage = VolleyErrorHandler.instance.erroHandler(error)
CoroutineScope(Dispatchers.Main).launch {
// Toast.makeText(context, errroMessage, Toast.LENGTH_LONG).show()
}
})
context.applicationContext.let {
VolleySingleton.getInstance(it).addToRequestQueue(request)
}
Log.i("listOfMovies", "$listResult")
return listResult
}
override suspend fun saveMovies(movieEntity: MovieEntity) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
interface VolleyCallBack{
fun onResponse(result:Result<List<MovieEntity>>): Result<List<MovieEntity>>
}
private fun getResult(result: Result<List<MovieEntity>>):Result<List<MovieEntity>>{
return result
}
}