Retrofitは、Okhttpパッケージに基づくネットワークリクエストライブラリのセットです。
レトロフィットに会う
後付け注釈
注解: Java注解(Annotation),是JDK5.0引入的一种注释机制同时也增加了对元数据的支持,这些注释在编译,类加载,运行时被读取,进行相应的处理。
コメントのリクエスト | 使用法の詳細 |
---|---|
GETリクエスト(ページ情報の本文を返します) | @Get( "Url") |
POSTリクエスト(操作用のデータの送信) | @POST( "Url") |
DELETEリクエスト(request-URLで識別されるリソースを削除します) | @DELETE( "Url") |
PUTリクエスト(サーバーへのリソースのアップロード) | @PUT( "Url") |
HEADリクエスト(GETに似ていますが、ヘッダーを取得します) | @HEAD( "Url") |
HTTPリクエストは、アノテーションを介して他のリクエストに変換できます | @HTTP(method = "GET"、path = "Url") |
OPTIONSリクエスト(テストサーバーリクエストの送信) | @OPTIONS( "Url") |
PATCHリクエスト(PUTは似ていますが、リソースが存在しないため、新しいリソースファイルが作成されます) | @POST( "Url") |
Retrofitは、これらのアノテーションを介してリクエスト本文をカプセル化し、その後のニーズはコードで説明されます
実際の戦闘ステージ
新たなプロジェクト
その後の使用をインポートする(Okio、OKHTTP、Retrofit、coil、gson)
//build.gradle(Module:XXX.App)
//dependences中添加
//okhttp io流处理
implementation "com.squareup.okio:okio:2.3.0"
//协程依赖
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0-RC-native-mt'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0-RC-native-mt'
//KTX
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
//coil
implementation("io.coil-kt:coil:1.2.1")
//gson
implementation 'com.google.code.gson:gson:2.8.6'
//okhttp
implementation("com.squareup.okhttp3:okhttp:4.9.0")
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
//开启ViewBining,android标签下
buildFeatures{
viewBinding true
}
复制代码
もちろん、AndroidMainifest
ネットワーク権限とapplicatioan
ラベルにクリアテキストトラフィックを許可するリクエストを追加することを忘れないでください
<uses-permission android:name="android.permission.INTERNET"/>
<application
...
android:usesCleartextTraffic="true"
复制代码
インターフェイスを使用する
SpringBootを密かに使用して、GETリクエストインターフェイスとPOSTリクエストインターフェイスを作成します
@GetMapping("/test")
public String getText(String name){
return "Hello "+name;
}
复制代码
@PostMapping("/queryByName")
public String readFile(@RequestBody String fileName){
return "Hello "+fileName;
}
复制代码
インターフェイスリクエストクラスを作成する
interface ApiService{
@GET("/test?name=Retrofit")
suspend fun test():String
@FormUrlEncoded
@POST("/queryByName")
suspend fun queryByName(@Field("fileName") name:String):String
}
复制代码
Retrofitヘルパークラスを作成し、BaseUrlとデータパーサーを追加します
object RetrofitUtil {
private const val BASE_URL = "http://192.168.0.106:8080"
private val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
//Scalar用于解析String数据
.addConverterFactory(ScalarsConverterFactory.create())
.build()
fun <T> create(service: Class<T>):T = retrofit.create(service)
}
复制代码
Converterは多くのデータパーサーをサポートしており、それらを使用する必要がある場合はプロジェクトに依存関係を追加します
com.squareup.retrofit2:converter-${XXXX}:version
Gson、Jackson、Simple XML、Protobuf、Moshi、Wire、Scalars
复制代码
データリクエスト処理用のMainViewModelクラスを作成します
class MianViewModel : ViewModel() {
var mainviewLiveData = MutableLiveData<String>()
private val api = RetrofitUtil.create(ApiService::class.java)
fun getQueryByName(){
viewModelScope.launch {
flow {
emit(api.queryByName("Retrofit"))
}.collect {
mainviewLiveData.postValue(it)
}
}
}
fun getTest(){
viewModelScope.launch {
flow {
emit(api.test())
}.collect {
mainviewLiveData.postValue(it)
}
}
}
}
复制代码
テスト
最後に、activity_mainレイアウトにボタン(btnClick)とテスト用のテキスト(textTitle)を作成します
private val mainViewModel by viewModels<MianViewModel>()
override fun init() {
b.btnClick.setOnClickListener {
mainViewModel.getQueryByName()
}
mainViewModel.mainviewLiveData.observe(this){
b.textTitle.setText(it)
}
}
复制代码
GETリクエストをリクエストできることがわかります
POSTリクエストも正常にフェッチされます
インターフェイステストデータもローカルに書き込み、次のエラーが発生した場合は、localhostをローカルIPアドレスに置き換えることができます
Retrofit的练习就此结束,多种请求的方式,使用的注解与方法也不同
Retrofit Api
Field(表单编码请求的命名对)、FieldMap(表单编码请求的命名键/值对)、FormUelEncoded(表示请求将使用表单URL编码)、Header(将标头替换为其目标的值。 标头参数可能会从请求中省略它们。)、Headers(添加Map或中指定的标头。)、Multipart(表示请求正文是多部分的。)、Part(表示多部分请求的单个部分。)、Path(URL 路径段中的命名替换)、Query(附加到 URL 的查询参数。)、Streaming(按原样对待返回方法上的响应正文)、Tag(使用类型作为键将参数实例添加为请求标记。)、Url(针对基本 URL解析的 URL。)
只是一篇简单的学习日记有不足见谅