Retrofit用法(一)クイックスタート

13908 ワード

Retrofitの使用を学んだばかりで、ここでまとめてみると、メモを取ることに相当する一方で、興味のある初心者が早く勉強できるのも便利です.
ここでは自分で最も簡単なdemoを書きましたが、後期にはもっと多くの例を増やします.まず、プロジェクトディレクトリを見てみましょう.
ここにコードを貼って、後でゆっくり説明します.java
public interface ApiService {
    @GET("sk/paylist.json")
    Call<News> getNews(@Query("platform")String platform,@Query("channel") String channel);
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private Button bt;
    private String BaseUrl = "http://10.10.6.195:8080/";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt = (Button) findViewById(R.id.bt);
        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(BaseUrl)
                .build();
        final ApiService mApi = retrofit.create(ApiService.class);



        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Call<News> news = mApi.getNews("android", "100");
                news.enqueue(new Callback<News>() {
                    @Override
                    public void onResponse(Call<News> call, Response<News> response) {
                        News s = response.body();
                        Log.d(TAG,s.getData().get(0).getName()+s.getData().get(0).getPrice());
                    }

                    @Override
                    public void onFailure(Call<News> call, Throwable t) {
                        Log.d(TAG+"4",t.toString());
                    }
                });
            }
        });




    }
}

News.java
package com.a4kgarden.mytest;

import java.util.List;

/** * Created by HY on 2017/2/28. */

public class News {

    /** * errMsg : * errCode : 0 * data : [{"time":"2016-11-08 18:18:29","price":"0.01","name":" "},{"time":"2016-11-08 18:18:32","price":"0.01","name":" "},{"time":"2016-11-08 18:18:36","price":"0.01","name":" "}] * version : 1.0.0 */

    private String errMsg;
    private String errCode;
    private String version;
    private List<DataBean> data;

    public String getErrMsg() {
        return errMsg;
    }

    public void setErrMsg(String errMsg) {
        this.errMsg = errMsg;
    }

    public String getErrCode() {
        return errCode;
    }

    public void setErrCode(String errCode) {
        this.errCode = errCode;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /** * time : 2016-11-08 18:18:29 * price : 0.01 * name :   */

        private String time;
        private String price;
        private String name;

        public String getTime() {
            return time;
        }

        public void setTime(String time) {
            this.time = time;
        }

        public String getPrice() {
            return price;
        }

        public void setPrice(String price) {
            this.price = price;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

ここでGetリクエストを送信する手順を見てみましょう
開始前にプロジェクトに必要な依存ライブラリを追加
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'

1.要求インタフェースクラスを新規作成します.このクラスで各要求、上のApiServicesを定義できます.JAvaではGetリクエストが1つしか定義されていませんが、デバッグを容易にするためにpaylistをローカルに取りました.jsonファイル、tomcatに入れて、ネットワークがこのインタフェースにアクセスすることをシミュレートして、あなたは必要に応じて自分のjsonファイルを構成することができます.
@GET("sk/paylist.json")// URL , MainActivity BaseUrl Call<News> getNews(@Query("platform")String platform,@Query("channel") String channel);
   /* @query get Url ? , demo , http://10.10.6.195:8080/sk/paylist.json?platform=android&channel=XIAOMI */
demo json , , 。

2.javabeanファイルを作成し、カプセル化して返すためのデータをstudioで開発した.ここではstudioのプラグインgsonformatを推奨し、プラグインライブラリでダウンロードすることができ、beanファイルをワンタッチで生成することができ、手動で構築する必要がなく、簡単で効率的である.3.要求を書くコード、やり方の一つで、ほかにもいろいろな書き方があるので、後で話しましょう.ここでは最も簡単なdemoですが、日常開発に満足できます.
Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(BaseUrl)
                .build();

        final ApiService mApi = retrofit.create(ApiService.class);
        Call<News> news = mApi.getNews("android", "100");
                news.enqueue(new Callback<News>() {
                    @Override
                    public void onResponse(Call<News> call, Response<News> response) {
                        News s = response.body();// , , 
                        Log.d(TAG,s.getData().get(0).getName()+s.getData().get(0).getPrice());
                    }

                    @Override
                    public void onFailure(Call<News> call, Throwable t) {
                        Log.d(TAG+"4",t.toString());
                    }
                });

Postリクエストの送信
ここでApiServiceにこのメソッドを追加し、@FeildはPostリクエストにリクエストパラメータを追加し、各Key-valueに対応して@FormUrlEncoded注記を追加する必要があります.
 @FormUrlEncoded @POST("pay/order") Call<OrderBean> getOrderId(@Field("productId") String productId, @Field("contentId") String contentId, @Field("seriesCode") String seriesCode, @Field("spId") String spId, @Field("userId") String userId, @Field("price") String price );

送信要求のコードは以下の通りで,ごく一部のコードのみが修正されている.
 Call<OrderBean> order = mApi.getOrderId("10001","101","432","100","sdjgkdjlkgj","0.01");
                order.enqueue(new Callback<OrderBean>() {
                    @Override
                    public void onResponse(Call<OrderBean> call, Response<OrderBean> response) {
                        OrderBean s = response.body();
                        Log.d(TAG,s.getData());
                    }

                    @Override
                    public void onFailure(Call<OrderBean> call, Throwable t) {
                        Log.d(TAG+"4",t.toString());
                    }
                });