Grundlegende Verwendung des Netzwerkanforderungsframeworks Retrofit (Kotlin)

Es wurde vor ein paar Tagen vorgestellt

Kotlins grundlegende Verwendung und Basisklassenkapselung, MVVM und DataBinding

LiveData-Sekundärverpackung, einfach in Kotlin zu verwenden

Das Android-Projekt verwendet es als Abhängigkeit

Puppy: Das oben Gesagte kann im Grunde ein komplettes Projekt realisieren
Murong Haizhu: Was fehlt Ihrer Meinung nach?
Puppy: Was fehlt, es ist genug
Murong Haizhu: Was verwenden Sie dann für Netzwerkanfragen? OKHTTP? Ich glaube nicht, dass es passt.
Welpe: Okay, lasst uns Retrofit verwenden
Murong Haizhu: Wie benutzt man es?
Welpenei: Gehen

Zuerst Abhängigkeiten importieren, wie man eine Abhängigkeit selbst schreibt siehe oben
. Bei Bedarf wird auch die Analyse miteinbezogen!

    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'

Zweitens kann es verwendet werden, indem einfach die relevanten Daten in die Methode geschrieben werden

Murong Haizhu: Mach keinen Ärger!

Retrofit ist ein Anforderungsframework, das auf der OKHTTP-Kapselung basiert. Es kann so verstanden werden, dass nur eine Kleidungsschicht für OKHTTP getragen wird und OKHTTP im Inneren immer noch aktiv ist. Die Kleidung dient nur dem besseren Aussehen und der Anforderungskörper wird durch dynamische Registrierung und Anmerkungen erstellt .

Hier nehmen wir als Beispiel die offene API von Android. Diese Demo läuft normal.

GET-Anfrage

Fügen Sie hier eine Bildbeschreibung ein

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-Anfrage

Fügen Sie hier eine Bildbeschreibung ein

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>
    }

Entitätsklasse: Da Kotlin verwendet wird, ist keine Get-Set-Methode erforderlich. Vergessen Sie also nicht, sie am Ende zu instanziieren

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


Auf den ersten Blick unterscheidet sich dieser Code nicht wesentlich von OKHTTP. Machen Sie sich keine Sorgen, schauen Sie genau hin

Fügen Sie hier eine Bildbeschreibung ein
Unter normalen Umständen können diese Teile zur zentralen Verwaltung und Entkopplung separat herausgenommen werden!

Lassen Sie uns den Prozess durchgehen, ihn mit OKHTTP vergleichen und uns den Teil der Anforderungsdaten ansehen. Get und Post werden separat in Form von Kommentaren herausgenommen. Für ttp benötigen Sie jedes Mal .add(" "," ") und Sie möchten es separat erhalten. Im Großen und Ganzen: Schreiben Sie eine kleine Entitätsklasse oder eine Karte? (Eigentlich können Sie FormBody übergeben.) ttp muss jedes Mal an Gson gehen, wenn die Anfrage erfolgreich ist, fit ist nicht erforderlich und . Der Körper wird direkt verwendet

Murong Haizhu: Was ist mit den anderen?

Welpenei:. . . . Nun, abgesehen von etwas offizieller Unterstützung für dieses und jenes ist es nichts zu verwenden, aber die Menge an Code und die Schreibweise sind wirklich viel einfacher zu verwenden. Lob!

Dog-Ei-Tipp:
Bei der Anforderung liegt möglicherweise ein Parsing-Fehler vor: JsonSyntaxException,
keine Panik
1. Laut Protokollfehler
Fügen Sie hier eine Bildbeschreibung ein
habe ich offensichtlich darauf hingewiesen, welcher Parameter-Parsing-Fehler falsch ist. Ändern Sie ihn einfach entsprechend der Eingabeaufforderung. Wenn Sie können Ändern Sie es nicht, prüfen Sie, ob der Parameter nützlich ist. Er wird im Allgemeinen im Internet verwendet. Kommentieren Sie die nutzlosen aus, hehehe

2. Auch wenn das Protokoll keine nützlichen Informationen enthält
, weist es auf die Art des Fehlers hin und errät den Fehler anhand der Art. Bestätigen Sie dies mit dem Back-End-Partner und ändern Sie es so, dass es konsistent ist, oder wenn es keine gibt Direkte Beweise, machen Sie eine Paketerfassung, um zu sehen. Finden Sie jemanden mit Screenshots, Ori

Acho que você gosta

Origin blog.csdn.net/As_thin/article/details/123816373
Recomendado
Clasificación