Retrofitの構成と使用


Retrofit構成
http://square.github.io/retrofit/これはRetrofitの公式ドキュメントのアドレスです.https://github.com/square/retrofitこれはgitのプロジェクトアドレスです
https://blog.csdn.net/carson_ho/article/details/73732076一人の大神はみんな彼を見ることができます.
私も公式のドキュメントを説明して、小さな例を作っただけです.興味のある方は公式サイトに行ってみてください.
Retrofit配置和使用_第1张图片
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

上の赤い枠の中の上のこの言叶sync nowの下のこれはアダプタを追加してクラスを解析するのでさえすれば、私は普通Gsonを使ってあなた达が慣れないならば别のものを探すことができて、これは主要ではありません.
Retrofitの使用
Retrofit配置和使用_第2张图片
これはみんな知っているでしょう.そうでなければ、HTTPの知識をよく補習しなければなりません.基礎知識がなければ勉強に苦労します.
まず、一般的なGETリクエストを簡単に説明して、Retrofitの使用の大まかな流れを熟知させます.
C友のpeakchaoの助けに感謝して私は彼の提供したインタフェースを使ってこれは彼のインタフェースの招待状ですhttps://blog.csdn.net/c__chao/article/details/78573737
https://www.apiopen.top/journalismApi例えば、これはニュースのインタフェースです.私たちはこのインタフェースからニュースを取得します.
まず、返されるデータに対するクラスを作成します.
Retrofit配置和使用_第3张图片
これは私がニュースインタフェースをJSONデータに返すクラスです.返されたデータは解析後のクラスも複雑で、私は貼らないで、解析クラスはみんなGsonFormatプラグインで迅速に解析することができます.
次にインタフェースクラスを構築し、その中に方法を書きます.
public interface Api {
    @GET("journalismApi")
    Call getNewsInfo();
}

簡単なGETタイプの要求注記括弧内にパスを記入しますこれはパラメータのないGETのパラメータの下で説明します
Call<>内は戻りデータ型ですここではNewBeanクラスに戻りますもちろんResponseBodyに直接記入することもできます
次はあなたの活动のページで下のコードを书いてあなたの欲しいデータを得て、もちろん活动のページを书かないほうがいいです.私は今モデルのコードです.简単に活动のページを书きます.
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://www.apiopen.top/")
                .addConverterFactory(GsonConverterFactory.create()).build();
        Api Api =retrofit.create(Api.class);
        Call call= Api.getNewsInfo();
        call.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                NewsBean result=response.body();
            }
            @Override
            public void onFailure(Call call, Throwable t) {

            }
        });

.baseUrl()内はホストアドレスである.addConverterFactory()内で解析のためにデータをクラスに解析します.これは依存を追加するために私に依存を追加しました.
これで私のタイプがNewsBeanのデータを返すことに成功しました.また、非同期呼び出しでは、スレッドを再開して管理する必要はありません.返された結果は、メインスレッド内で直接使用すればいいです.
次に、ユーザ登録などのパラメータ付きGETリクエストを行います.
それともC友の招待状の内のインタフェースを呼び出します
https://www.apiopen.top/login?key=00d91e8e0cca2b76f515926a36db68f5&phone=13594347817&passwd=123456
ここでは3パラメータ:key,phone,passwd
まずはインターフェイスにGET方法を书きます
Retrofit配置和使用_第4张图片
私は3種類の伝達方式の方法を書いて、第1種は直接住所の中で死んで、第2と第3はそれぞれパラメータを伝達してmapを使って、呼び出しの時に対応するパラメータに入ってくれればいいです
 Call call=reponse.getUserInfo();
 Call call=reponse.getUserInfo(key,phone,passwd);
 Call call=reponse.getUserInfo(map);

POST


interface APIStore {
   @Headers({"Content-Type: application/json","Accept: application/json"})//     
   @POST ("vdyweb/ws/rest/Login")
   CallgetMessage(@Body RequestBody info);   //     RequestBody   

}

 
String obj=gson.toJson(info);  JSON   
        retrofit=new Retrofit.Builder().baseUrl(BASE_LOGIN_URL).build();
        RequestBody body=RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),obj);
        final APIStore login = retrofit.create(APIStore.class);
        retrofit2.Call data = login.getMessage(body);
        data.enqueue(new Callback() {
            @Override
            public void onResponse(retrofit2.Call call, Response response) {
                Log.d(TAG, "onResponse: --ok--"+response.body());
                try {
                    Log.d(TAG, "onResponse: --ok--"+response.body().string());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void onFailure(retrofit2.Call call, Throwable t) {
                Log.d(TAG, "onResponse: --err--"+t.toString());
            } });} }