Получение данных с использованием Retrofit и вставка в базу данных SQLite - PullRequest
2 голосов
/ 11 апреля 2019

Я только начал работать с Kotlin. Я успешно получил данные из API, используя Retrofit. Я должен вставить эти данные в 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()
}

1 Ответ

1 голос
/ 11 апреля 2019

Если вы успешно вернули 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 используйте методы получения, чтобы получить дополнительную информацию о фильме;Например:

String imgURL = myMovie.getImage();
String movieName = myMovie.getTitle();

Создайте базу данных SQLite из библиотеки Room Persistence (это проще и проще, чем напрямую с использованием базы данных SQLite) и добавьте туда информацию о фильме.Чтение - Сохранение данных в локальной базе данных с использованием Room .Или продолжите работу с базой данных SQLite и вызовите соответствующий метод и запрос insert, которые вы создали с использованием данных, полученных в imgURL и movieName.

Вы также можете иметь специальный метод в своем классе обработчика базы данных.который может взять весь myMovieList за один раз и перебрать его, вставляя значения в базу данных одно за другим.

Мои примеры кода на Java, но вы должны быть в состоянии написать свои эквивалентные Kotlin.

Вот официальная документация в Библиотеке постоянства комнаты.

...