Kotlinにおけるレトロフィット+コウモリの使用
まず第一に、Retrofitは何ですか?
そのウェブサイトが言うように、アンドロイドとJavaのためのタイプ安全なHTTPクライアントです(我々は、Kotlin ...)を使いそうです.だから、基本的にAndroid用のRESTクライアントです.それは私たちが取得し、残りのAPIを通してデータをアップロードするのに役立ちます.
Coroutinesについてはどうですか?
Androidでは、Coroutinesはそれ以外の場合は、メインスレッドをブロックする可能性のある長期的なタスクを管理し、あなたのアプリが無反応になる原因に役立ちます.
さて、基本的な実装を見てみましょう
まず、プロジェクトに依存関係を追加する必要があります.ビルド変数にバージョン変数を追加します.gradle () ,組み込みスクリプト
この例ではAdvice Slip JSON APIを使います.より具体的には、このURLはあなたがそれを呼び出すたびにランダムなアドバイスを返します.
ここでJSONを取得します.
AdviceProperty.KT AdviceApiservice.KT を返します.KTはJSONのプロパティをデータクラス構造に追加します.次のようにします.
それから、Adviceapiserviceで.KTは私たちのレトロフィットのインスタンスをセットアップします.
私はMVVMアーキテクチャを使用しています.そして、それは私が私のアプリのためにすべてのデータを管理するViewModelクラスを持っている各々の断片/活動とこのAPI呼び出しを意味します.
それで、ViewModel(これはあなたのクラスでありえます)で、私は私のデータを保存することになっているCloudプロパティという変数を持っています
つ目はCOOTOINESCOPEです.ここでは、どのスレッドがコルーチンを実行するかを定義します.
次に、コルーチンを作成し、APIへの呼び出しを管理する方法
次に、GetProperty変数で「wait」という単語を見ることができます.これは、Singletonクラスが延期されたオブジェクト(Javaでの特徴や約束)を返すからです.
Viewモデルを使用している場合、onclear ()メソッドのジョブを取り消すことを忘れないでください
私のリポジトリを見てみてください.
そのウェブサイトが言うように、アンドロイドとJavaのためのタイプ安全なHTTPクライアントです(我々は、Kotlin ...)を使いそうです.だから、基本的にAndroid用のRESTクライアントです.それは私たちが取得し、残りのAPIを通してデータをアップロードするのに役立ちます.
Coroutinesについてはどうですか?
Androidでは、Coroutinesはそれ以外の場合は、メインスレッドをブロックする可能性のある長期的なタスクを管理し、あなたのアプリが無反応になる原因に役立ちます.
さて、基本的な実装を見てみましょう
まず、プロジェクトに依存関係を追加する必要があります.ビルド変数にバージョン変数を追加します.gradle () ,組み込みスクリプト
buildscript {
ext {
version_moshi = "1.8.0"
version_retrofit = "2.5.0"
version_retrofit_coroutines_adapter = "0.9.2"
version_kotlin_coroutines = "1.1.0"
version_retrofit_coroutines_adapter = "0.9.2"
}
…
}
次に、次の依存関係をビルドに追加します.Gradle ( app )//coroutines
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$version_kotlin_coroutines"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$version_kotlin_coroutines"
implementation "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:$version_retrofit_coroutines_adapter"
//Retrofit
implementation "com.squareup.retrofit2:retrofit:$version_retrofit"
implementation "com.squareup.retrofit2:converter-moshi:$version_retrofit"
//moshi
implementation "com.squareup.moshi:moshi:$version_moshi"
implementation "com.squareup.moshi:moshi-kotlin:$version_moshi"
あなたのプロジェクトを構築し、今私たちを開始する準備が整いました.この例ではAdvice Slip JSON APIを使います.より具体的には、このURLはあなたがそれを呼び出すたびにランダムなアドバイスを返します.
ここでJSONを取得します.
{
"slip": {
"id": 45,
"advice": "Build something out of LEGO."
}
}
まず最初に、「ネットワーク」という名前の新しいパッケージを作成します.import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
data class AdviceProperty(
val slip: AdviceData
): Parcelable
@Parcelize
data class AdviceData (
val id: Int,
val advice: String
): Parcelable
ご覧の通り、我々はJSON構造に従います.我々の最初のデータクラスには、型がAdviceDataであるSLIPというプロパティがあります.この型は、2つのプロパティIDとアドバイスを持つ別のデータクラスです.このようにして、ネストされたJSON構造を複製できます.それから、Adviceapiserviceで.KTは私たちのレトロフィットのインスタンスをセットアップします.
import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import kotlinx.coroutines.Deferred
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.http.GET
// The base URL where our API is
private const val BASE_URL = "https://api.adviceslip.com/"
/* Moshi Makes it easy to parse JSON into objects
you can use GSON instead if you want*/
private val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
//Here is our retrofit instance
private val retrofit = Retrofit.Builder()
.addConverterFactory(MoshiConverterFactory.create(moshi))
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.baseUrl(BASE_URL)
.build()
//Then we are going to create the interface
which is going to help to handle our GET method
to call the API*/
interface AdviceApiService{
@GET("advice")
fun getProperty():
Deferred<AdviceProperty>
}
/* Singleton to create this instance only once
and get it ready every time we call it. */
object AdviceApi {
val retrofitService : AdviceApiService by lazy {
retrofit.create(AdviceApiService::class.java)
}
}
よろしい!我々はほとんど完了です!私はMVVMアーキテクチャを使用しています.そして、それは私が私のアプリのためにすべてのデータを管理するViewModelクラスを持っている各々の断片/活動とこのAPI呼び出しを意味します.
それで、ViewModel(これはあなたのクラスでありえます)で、私は私のデータを保存することになっているCloudプロパティという変数を持っています
private var _properties = MutableLiveData<AdviceProperty>()
次に、他の2つの変数があります.private val viewModelJob = Job()
private val coroutineScope = CoroutineScope( viewModelJob + Dispatchers.Main )
一つ目は、コルーチンのスコープのライフサイクルを定義するジョブです.そのため、子プロセスが失敗した場合は、親に通知し、他の子をキャンセルします.つ目はCOOTOINESCOPEです.ここでは、どのスレッドがコルーチンを実行するかを定義します.
次に、コルーチンを作成し、APIへの呼び出しを管理する方法
private fun getAdviceProperty(){
coroutineScope.launch {
var getProperty = AdviceApi.retrofitService.getProperty()
try {
_properties.value = getProperty.await()
}catch (e: Exception){
//library to show logs
Timber.i("EROR ${e}");
}
}
}
ここで見ることができますので、私たちはcoroutinescopeを持っています.コードのこのブロックを起動すると、新しいcoroutineを作成し、以前に定義したスレッドで実行できます.次に、GetProperty変数で「wait」という単語を見ることができます.これは、Singletonクラスが延期されたオブジェクト(Javaでの特徴や約束)を返すからです.
Viewモデルを使用している場合、onclear ()メソッドのジョブを取り消すことを忘れないでください
override fun onCleared() {
super.onCleared()
viewModelJob.cancel()
}
そして、それ!我々は今、変数内で我々の反応を持っており、我々は必要に応じてそれを使用することができます.これは、Javaで使用したり、Cooutinesなしで使用するよりもはるかに少ないコードです.私のリポジトリを見てみてください.
Reference
この問題について(Kotlinにおけるレトロフィット+コウモリの使用), 我々は、より多くの情報をここで見つけました https://dev.to/jbc7ag/using-retrofit-coroutines-in-kotlin-15bcテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol