네트워크 요청 프레임워크 Retrofit(Kotlin)의 기본 사용

며칠전에 소개됐는데

Kotlin의 기본 사용법 및 기본 클래스 캡슐화, MVVM 및 DataBinding

Kotlin에서 사용하기 쉬운 LiveData 보조 패키징

Android 프로젝트는 이를 종속성으로 사용합니다.

강아지: 위의 내용은 기본적으로 완전한 프로젝트를 실현할 수 있습니다.
무롱 하이주: 무엇이 빠졌다고 생각하시나요?
강아지: 부족한 것, 충분합니다.
무롱 하이주: 그럼 네트워크 요청에 무엇을 사용하시나요? 알았어HTTP? 안 맞는 것 같아요
강아지: 알았어 Retrofit을 사용하자
무롱하이주: 어떻게 사용하나요?
강아지 알: 걷기

먼저 종속성 가져오기, 직접 종속성을 작성하는 방법은 위를 참조하세요
. 요청이 있으면 분석도 포함됩니다!

    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. 로그에 유용한 정보가 없더라도
오류의 종류를 지적하고, 그 종류에 따라 오류를 추측해 백엔드 파트너에게 확인 후 일관성 있게 변경하거나, 오류가 없는 경우 직접적인 증거는 패킷 캡쳐해서 확인하세요 스크린샷 있는 사람 찾아보세요 오리

추천

출처blog.csdn.net/As_thin/article/details/123816373