我刚刚开始与Kotlin合作。我已经使用Retrofit从API成功获取了数据。我必须在SQLite中插入该数据。但是我无法从响应中获取特定数据。
这是我的代码:
apiInterface.enqueue( object : Callback<List<Movie>> {
override fun onResponse(call: Call<List<Movie>>?, response: Response<List<Movie>>?) {
if(response?.body() != null)
recyclerAdapter.setMovieListItems(response.body()!!)
response?.let {
for (i:Int in response.body()!!) {
recyclerAdapter.setMovieListItems(response.body()!!)
val myMovieList = response.body()
val myMovie = myMovieList!!.get(i)
var movie = MovieDatabase(myMovie.title, myMovie.image)
db.insertMovieData(movie)
}
}
}
override fun onFailure(call: Call<List<Movie>>?, t: Throwable?) {
}
})
}
这是我的插入方法:
fun insertMovieData(movie: MovieDatabase) {
val db = this.writableDatabase
var cv = ContentValues()
cv.put(COL_FIRST_NAME, movie.name)
cv.put(COL_LAST_NAME, movie.image)
var result = db.insert(TABLE_NAME_MOVIE, null, cv)
if (result == -1.toLong())
Toast.makeText(context, "Failed", Toast.LENGTH_SHORT).show()
else
Toast.makeText(context, "Success", Toast.LENGTH_SHORT).show()
}
答案 0 :(得分:1)
如果成功,则从响应正文中退回List<Movie>
,只需将响应放入List<Movie> myList
。
List<Movie> myMovieList = response.body();
然后循环遍历以获得所需的值。
Movie myMovie = myList.get(0); //To get first Movie in list and so on
然后按照您的Movie类,使用getter方法获取电影的更多详细信息;例如:
String imgURL = myMovie.getImage();
String movieName = myMovie.getTitle();
从Room Persistence Library中构建一个SQLite数据库(比直接使用SQLite数据库更简单),然后在其中添加电影信息。阅读-Save data in a local database using Room。或者,继续您的SQLite数据库,并调用各自的insert
方法,并使用在imgURL和movieName中获得的数据查询已构建的数据。
您还可以在数据库处理程序类中有一个特殊的方法,该方法可以一次性获取整个myMovieList并对其进行迭代,将值一个接一个地插入数据库。
我的代码示例使用Java,但是您应该能够编写与Kotlin等效的示例。
这是Room Persistence Library上的official documentation。