» » » Android LiveData на Kotlin с использованием Retrofit и coroutines

 

Android LiveData на Kotlin с использованием Retrofit и coroutines

Автор: admin от 24-10-2018, 21:15, посмотрело: 302

Статья рассказывает об использовании kotlin-coroutines-retrofit

Расширение для Retrofit на Kotlin. Это всего два файла. Я просто добавил их в проект. Вы можете подключить их через Dependency в Gradle. На Github есть примеры использования.

Также подключаем Adapter addCallAdapterFactory(CoroutineCallAdapterFactory()).

ServerAPI и Repository находятся в одном файле



REST API



Реализацией REST API на Kotlin. Она не имеет каких либо специфичных изменений



[spoiler=ServerAPI]
import android.arch.lifecycle.MutableLiveData
import android.util.Log
import com.jakewharton.retrofit2.adapter.kotlin.coroutines.experimental.CoroutineCallAdapterFactory
import kotlinx.coroutines.experimental.android.UI
import kotlinx.coroutines.experimental.async
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Call
import retrofit2.http.*
import ru.gildor.coroutines.retrofit.Result
import ru.gildor.coroutines.retrofit.awaitResult

object ServerAPI {

    var API_BASE_URL: String = getNetworkHost();
    var httpClient = OkHttpClient.Builder().addInterceptor(
        HttpLoggingInterceptor().apply {
            level = if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
        })

    var builder: Retrofit.Builder = Retrofit.Builder()
            .baseUrl(API_BASE_URL)
            .addCallAdapterFactory(CoroutineCallAdapterFactory())
            .addConverterFactory(GsonConverterFactory.create())

    var retrofit = builder
            .client(httpClient.build())
            .build()

    var netService = retrofit.create<NetService>(
        NetService::class.java!!)

    interface NetService {
        @GET("api/stores")
        fun getStoreAll(@Header("Authorization") bearer: String): Call[leech=https://developer.android.com/jetpack/docs/guide#addendum]A generic class that contains data and status about loading this data[/leech]

 

 [code]// A generic class that contains data and status about loading this data.
public class Resource<T> {
    @NonNull public final Status status;
    @Nullable public final T data;
    @Nullable public final String message;
    private Resource(@NonNull Status status, @Nullable T data,
            @Nullable String message) {
        this.status = status;
        this.data = data;
        this.message = message;
    }

    public static <T> Resource<T> success(@NonNull T data) {
        return new Resource<>(Status.SUCCESS, data, null);
    }

    public static <T> Resource<T> error(String msg, @Nullable T data) {
        return new Resource<>(Status.ERROR, data, msg);
    }

    public static <T> Resource<T> loading(@Nullable T data) {
        return new Resource<>(Status.LOADING, data, null);
    }

    public enum Status { SUCCESS, ERROR, LOADING }
}
      


[/spoiler]

ViewModel



StoresViewModel запрашивает данные у репозитория и сохраняет во внутренней переменной stores



val api = Repository()
stores = api.getStores(token)


[spoiler=ViewModel]
class StoresViewModel (context: Context, token: String) : ViewModel() {
    val stores: MutableLiveData<Resource[leech=https://github.com/NaluLabs/prefs-delegates]prefs-delegates by Fabio Collini[/leech]



[code]class TokenHolder(prefs: SharedPreferences) {
    var token by prefs.string()
        private set

    var count by prefs.int()
        private set

    fun saveToken(newToken: String) {
        token = newToken
        count++
    }
}


Gradle



    implementation 'android.arch.lifecycle:extensions:1.1.1'
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:0.30.0"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:0.30.0"
    implementation "com.squareup.retrofit2:retrofit:2.4.0"
    implementation "com.squareup.retrofit2:converter-gson:2.4.0"
    implementation "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-experimental-adapter:1.0.0"
    // If you use Kotlin 1.2 or 1.3
    // compile 'ru.gildor.coroutines:kotlin-coroutines-retrofit:0.13.0'
    // compile 'ru.gildor.coroutines:kotlin-coroutines-retrofit:0.13.0-eap13'


Links



Все в одном примере



Android Architecture Components samples



LiveData Overview



Async code using Kotlin Coroutines



Multithreading and Kotlin

Источник: Хабр / Интересные публикации

Категория: Веб-разработка, Game Development, Android

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *