数日前に紹介されました
Kotlin の基本的な使い方と基本クラスのカプセル化、MVVM と DataBinding
LiveData の二次パッケージ化、Kotlin での使用が簡単
Android プロジェクトはそれを依存関係として使用します
子犬: 基本的に上記で完全なプロジェクトを実現できます
慕容海珠: 何が足りないと思いますか?
子犬: 何が足りない、それで十分です
慕容海珠: では、ネットワーク リクエストには何を使いますか? OKHTTP? パピー:よし
、後付けで使おう 慕容
海珠: 使い方は?
子犬の卵: 歩く
まずは依存関係をインポート、自分で依存関係を書く方法は上記
参照 リクエストがあれば解析も含めます!
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
次に、メソッドに関連するデータを書き込むだけで使用できます。
慕容海珠:騒ぐなよ!
Retrofit は、OKHTTP カプセル化に基づくリクエスト フレームワークです。OKHTTP 用の服を着ているだけと理解できます。OKHTTP は内部でまだアクティブです。服は見栄えを良くするためのもので、リクエスト本文は動的な登録とアノテーションによって構築されます。 。
ここでは Android のオープン API を例に説明しますが、このデモは正常に動作します。
GETリクエスト
fun getData(){
val mGson = GsonBuilder()
.setLenient() // 设置GSON的非严格模式setLenient()
.create()
Retrofit.Builder()
.baseUrl("https://www.wanandroid.com/")
.addConverterFactory(GsonConverterFactory.create(mGson))
.build()
.create(getData::class.java)
.getJsonData()
.enqueue(object : Callback<JsonsRootBean?> {
override fun onResponse(call: Call<JsonsRootBean?>, response: Response<JsonsRootBean?>) {
//请求成功走这里
val body: JsonsRootBean? = response.body()
}
override fun onFailure(call: Call<JsonsRootBean?>, t: Throwable) {
//请求失败走这里
Log.e(TAG, "onFailure: $t")
}
})
}
interface getData {
@GET("article/list/1/json")
fun getJsonData(
//这里面放参数
): Call<JsonsRootBean>
}
POSTリクエスト
fun postData(){
var mGson = GsonBuilder()
.setLenient() // 设置GSON的非严格模式setLenient()
.create()
Retrofit.Builder()
.baseUrl("https://www.wanandroid.com/")
.addConverterFactory(GsonConverterFactory.create(mGson))
.build()
.create(postData::class.java)
.getJsonData(
"我是Token",
"我是其他的数据")
.enqueue(object : Callback<JsonsRootBean?> {
override fun onResponse(call: Call<JsonsRootBean?>, response: Response<JsonsRootBean?>) {
val body = response.body()
}
override fun onFailure(call: Call<JsonsRootBean?>, t: Throwable) {
Log.e(TAG, "onFailure: $t")
}
})
}
interface postData{
@FormUrlEncoded
@POST("article/cutStore")
fun getJsonData(
@Header("apikey") apikey: String,
@Field("articleid") articleid: String?,
): Call<JsonsRootBean>
}
Entityクラス:Kotlinを使用しているためget setメソッドが必要ないので、最後に忘れずにインスタンス化してください
class JsonsRootBean(
private var data: Data? = null,
private var errorcode: Int = 0,
private var errormsg: String? = null
) : Serializable
class Datas(
var apklink: String? = null,
var audit: Int = 0,
var author: String? = null,
var canedit: Boolean = false,
var chapterid: Int = 0,
var chaptername: String? = null,
var collect: Boolean = false,
var courseid: Int = 0,
var desc: String? = null,
var descmd: String? = null,
var envelopepic: String? = null,
var fresh: Boolean = false,
var host: String? = null,
var id: Int = 0,
var link: String? = null,
var nicedate: String? = null,
var nicesharedate: String? = null,
var origin: String? = null,
var prefix: String? = null,
var projectlink: String? = null,
var publishtime: Int = 0,
var realsuperchapterid: Int = 0,
var selfvisible: Int = 0,
var sharedate: Int = 0,
var shareuser: String? = null,
var superchapterid: Int = 0,
var superchaptername: String? = null,
//var tags: ArrayList<String>? = arrayListOf(),
var title: String? = null,
var type: Int = 0,
var userid: Int = 0,
var visible: Int = 0,
var zan: Int = 0,
) : Serializable
class Data(
var curpage: Int = 0,
var datas: List<Datas>? = null,
var offset: Int = 0,
var over: Boolean = false,
var pagecount: Int = 0,
var size: Int = 0,
var total: Int = 0,
) : Serializable
一見すると、このコードは OKHTTP とあまり変わりません。心配しないでください。よく見てください。
通常の状況では、これらの部品を個別に取り出して集中管理し、切り離すことができます。
OKHTTPと比較してリクエストデータ部分を見てみましょう。Getとpostはコメントという形で別々に取り出しています。ttpの場合は毎回.add(" "," ")が必要で、個別に取得したいのですが、大まかに言えば、小さなエンティティ クラスまたはマップを作成していますか? (実際には、FormBody を渡すことができます) ttp は、リクエストが成功するたびに Gson に移動する必要があり、fit は必要ありません。本体を直接使用します
慕容海珠:他の人はどうですか?
子犬の卵:。。。。, まあ、公式であれこれサポートされている以外は特に使うことはありませんが、コード量や書き方は確かに格段に使いやすくなりました。賞賛!
犬の卵のヒント:
リクエスト時に解析エラーが発生する可能性があります: JsonSyntaxException、
パニックにならないでください
1. ログ エラーによると
、どのパラメータ解析エラーが間違っているかを明確に指摘しました。プロンプトに従って変更するだけです。できる場合は、変更しないでください。このパラメータが役立つかどうかを確認してください。これはインターネットで一般的に使用されています。役に立たないものはコメントアウトしてください、ふふふ
2. ログに有用な情報がない場合でも
、エラーの種類を指摘し、その種類に基づいてエラーを推測します。バックエンド パートナーに確認して、一貫性のあるものに変更するか、ログがない場合は、バックエンド パートナーに確認して変更します。直接的な証拠がある場合は、パケット キャプチャを実行して確認してください。スクリーンショットを持っている人を見つけてください、Ori