AndroidはRetrofit Webフレームワークを使用

レトロフィットネットワークフレームワークの学習:

Retrofitの最下層は、OkHttpやGsonなどのフレームワークをカプセル化し、RESTfulなプログラミングスタイルです。クエリ用のインターフェースを作成する必要があります

コード部分:

注:baseUrlは「/」で終了する必要があります。そうしないと、例外がスローされます

.addConverterFactory(GsonConverterFactory.create())
は、取得したJSONデータをGSONデータに変換し、それをエンティティクラスに自動的にカプセル化します


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
 Retrofit builder =new Retrofit.Builder()
 				/*必须以  '/'  结束*/
                .baseUrl("http://apis.juhe.cn/simpleWeather/") 
                /*将返回的数据转换为Gson*/
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        ApiService apiService = builder.create(ApiService.class);
        HashMap<String, String> map = new HashMap<>();
        map.put("city","北京");
        map.put("key","88888888");
        apiService.getWeather(map)
                .enqueue(new Callback<Weather>() {
    
    
                    @Override
                    public void onResponse(Call<Weather> call, Response<Weather> response) {
    
    
                        try {
    
    
                            text.setText(response.body().toString());
                            Log.e("onSuccess", response.body().toString() + "");
                        } catch (Exception e) {
    
    
                            Log.e("onResponse", "获取数据错误:" + e.getMessage() );
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onFailure(Call<Weather> call, Throwable t) {
    
    
                        Log.e("onResponse", "错误"  + t.getMessage());

                    }
                });
                }

GsonFormatを使用してBeanクラスを自動的に生成する
package com.gsonweathertest.pojo;


import java.util.List;

public class Weather {
    
    

    @Override
    public String toString() {
    
    
        return "Weather{" +
                "reason='" + reason + '\'' +
                ", result=" + result +
                ", error_code=" + error_code +
                '}';
    }

    /**
     * reason : 查询成功
     * result : {"city":"苏州","realtime":{"temperature":"4","humidity":"82","info":"阴","wid":"02","direct":"西北风","power":"3级","aqi":"80"},"future":[{"date":"2019-02-22","temperature":"1/7℃","weather":"小雨转多云","wid":{"day":"07","night":"01"},"direct":"北风转西北风"},{"date":"2019-02-23","temperature":"2/11℃","weather":"多云转阴","wid":{"day":"01","night":"02"},"direct":"北风转东北风"},{"date":"2019-02-24","temperature":"6/12℃","weather":"多云","wid":{"day":"01","night":"01"},"direct":"东北风转北风"},{"date":"2019-02-25","temperature":"5/12℃","weather":"小雨转多云","wid":{"day":"07","night":"01"},"direct":"东北风"},{"date":"2019-02-26","temperature":"5/11℃","weather":"多云转小雨","wid":{"day":"01","night":"07"},"direct":"东北风"}]}
     * error_code : 0
     */

    private String reason;
    private ResultBean result;
    private int error_code;

    public String getReason() {
    
    
        return reason;
    }

    public void setReason(String reason) {
    
    
        this.reason = reason;
    }

    public ResultBean getResult() {
    
    
        return result;
    }

    public void setResult(ResultBean result) {
    
    
        this.result = result;
    }

    public int getError_code() {
    
    
        return error_code;
    }

    public void setError_code(int error_code) {
    
    
        this.error_code = error_code;
    }

    public static class ResultBean {
    
    
        @Override
        public String toString() {
    
    
            return "ResultBean{" +
                    "city='" + city + '\'' +
                    ", realtime=" + realtime +
                    ", future=" + future +
                    '}';
        }

        /**
         * city : 苏州
         * realtime : {"temperature":"4","humidity":"82","info":"阴","wid":"02","direct":"西北风","power":"3级","aqi":"80"}
         * future : [{"date":"2019-02-22","temperature":"1/7℃","weather":"小雨转多云","wid":{"day":"07","night":"01"},"direct":"北风转西北风"},{"date":"2019-02-23","temperature":"2/11℃","weather":"多云转阴","wid":{"day":"01","night":"02"},"direct":"北风转东北风"},{"date":"2019-02-24","temperature":"6/12℃","weather":"多云","wid":{"day":"01","night":"01"},"direct":"东北风转北风"},{"date":"2019-02-25","temperature":"5/12℃","weather":"小雨转多云","wid":{"day":"07","night":"01"},"direct":"东北风"},{"date":"2019-02-26","temperature":"5/11℃","weather":"多云转小雨","wid":{"day":"01","night":"07"},"direct":"东北风"}]
         */

        private String city;
        private RealtimeBean realtime;
        private List<FutureBean> future;

        public String getCity() {
    
    
            return city;
        }

        public void setCity(String city) {
    
    
            this.city = city;
        }

        public RealtimeBean getRealtime() {
    
    
            return realtime;
        }

        public void setRealtime(RealtimeBean realtime) {
    
    
            this.realtime = realtime;
        }

        public List<FutureBean> getFuture() {
    
    
            return future;
        }

        public void setFuture(List<FutureBean> future) {
    
    
            this.future = future;
        }

        public static class RealtimeBean {
    
    
            /**
             * temperature : 4
             * humidity : 82
             * info : 阴
             * wid : 02
             * direct : 西北风
             * power : 3级
             * aqi : 80
             */

            private String temperature;
            private String humidity;
            private String info;
            private String wid;
            private String direct;
            private String power;
            private String aqi;

            public String getTemperature() {
    
    
                return temperature;
            }

            public void setTemperature(String temperature) {
    
    
                this.temperature = temperature;
            }

            public String getHumidity() {
    
    
                return humidity;
            }

            public void setHumidity(String humidity) {
    
    
                this.humidity = humidity;
            }

            public String getInfo() {
    
    
                return info;
            }

            public void setInfo(String info) {
    
    
                this.info = info;
            }

            public String getWid() {
    
    
                return wid;
            }

            public void setWid(String wid) {
    
    
                this.wid = wid;
            }

            public String getDirect() {
    
    
                return direct;
            }

            public void setDirect(String direct) {
    
    
                this.direct = direct;
            }

            public String getPower() {
    
    
                return power;
            }

            public void setPower(String power) {
    
    
                this.power = power;
            }

            public String getAqi() {
    
    
                return aqi;
            }

            public void setAqi(String aqi) {
    
    
                this.aqi = aqi;
            }
        }

        public static class FutureBean {
    
    
            @Override
            public String toString() {
    
    
                return "FutureBean{" +
                        "date='" + date + '\'' +
                        ", temperature='" + temperature + '\'' +
                        ", weather='" + weather + '\'' +
                        ", wid=" + wid +
                        ", direct='" + direct + '\'' +
                        '}';
            }

            /**
             * date : 2019-02-22
             * temperature : 1/7℃
             * weather : 小雨转多云
             * wid : {"day":"07","night":"01"}
             * direct : 北风转西北风
             */

            private String date;
            private String temperature;
            private String weather;
            private WidBean wid;
            private String direct;

            public String getDate() {
    
    
                return date;
            }

            public void setDate(String date) {
    
    
                this.date = date;
            }

            public String getTemperature() {
    
    
                return temperature;
            }

            public void setTemperature(String temperature) {
    
    
                this.temperature = temperature;
            }

            public String getWeather() {
    
    
                return weather;
            }

            public void setWeather(String weather) {
    
    
                this.weather = weather;
            }

            public WidBean getWid() {
    
    
                return wid;
            }

            public void setWid(WidBean wid) {
    
    
                this.wid = wid;
            }

            public String getDirect() {
    
    
                return direct;
            }

            public void setDirect(String direct) {
    
    
                this.direct = direct;
            }

            public static class WidBean {
    
    
                @Override
                public String toString() {
    
    
                    return "WidBean{" +
                            "day='" + day + '\'' +
                            ", night='" + night + '\'' +
                            '}';
                }

                /**
                 * day : 07
                 * night : 01
                 */

                private String day;
                private String night;

                public String getDay() {
    
    
                    return day;
                }

                public void setDay(String day) {
    
    
                    this.day = day;
                }

                public String getNight() {
    
    
                    return night;
                }

                public void setNight(String night) {
    
    
                    this.night = night;
                }
            }
        }
    }
}


インターフェースクラス

注:POSTやGETなどの注釈の場合、値属性を記述し、そうでない場合は「。」または「/」を入力し、POST要求に@FormUrlEncodedで注釈付ける必要があります。そうでない場合、例外がスローされます

public interface ApiService {
    
    
    @FormUrlEncoded  //post请求必须加上
    @POST("query") //没有数据就填 . 或者 /
    Call<Weather> getWeather(@FieldMap Map<String,String> map);

}

その他のインターフェースケース

/*如果想使用url上的参数时,请求参数必须使用@Path注解来获取。*/
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);

/*还可以添加查询参数。*/
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);

/*对于复杂的查询参数组合,可以使用Map。*/
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);

/*@Field注解将每一个请求参数都存放至请求体中*/
/*对于复杂的查询参数组合,可以使用映射。可以通过@Body注释指定一个对象作为HTTP请求体使用。*/
@POST("users/new")
Call<User> createUser(@Body User user);

/*当@ formurlencodes出现在方法上时,将发送表单编码的数据。每个键-值对都用@Field注释,其中包含名称和提供值的对象。*/
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);

アノテーション名 注意と効果
@体 メソッドのパラメーターを操作する場合、このアノテーションを使用して定義されたパラメーターはnullにできません
@URL 要求されたインターフェースアドレスを追加するために使用されるメソッドパラメーターに作用する
@フィールド メソッドに作用するパラメータは、フォームリクエストを送信するために使用されます。String.valueOf()を使用してパラメータ値をStringに変換し、URLエンコーディングを実行します。パラメータ値がnull値の場合、自動的に無視されます
@FieldMap メソッドに作用するパラメータは、フォームリクエストを送信するために使用されます。マップ内の各アイテムのキーと値は空にできません。それ以外の場合は、IllegalArgumentExceptionがスローされます
@FormUrlEncoded FieldアノテーションとFieldMapアノテーションの変更に使用されます。このアノテーションを使用すると、リクエストの本文でフォームのURLエンコーディングが使用されます。フィールドはパラメーターとして宣言し、@ FieldまたはFieldMapで注釈を付ける必要があります。FormUrlEncodedでアノテートされたリクエストは、MIMEタイプ「application / x-www-form-urlencoded」を持ちます。フィールド名と値は、最初にUTF-8エンコードされ、次にURIエンコードされます。
@取得する getリクエストの送信に使用されるGETアノテーションは、通常、相対パス、絶対パス、またはフルパスを追加する必要があります。GETアノテーションの後にリクエストパスを追加したくない場合は、メソッドの最初のパラメーターに@Urlアノテーションを使用してリクエストパスを追加できます。
@道 メソッドのパラメーターを操作して、URLパスセグメントの指定されたパラメーター値を置き換えます。String.valueOf()とURLエンコーディングを使用して、値を文字列に変換します。このアノテーションを使用して定義されたパラメータの値は空にできません。パラメータ値はデフォルトでURLエンコーディングを使用します
@役職 これは、POSTリクエストを送信するために使用されます。POSTアノテーションは、通常、相対パス、絶対パス、またはフルパスを追加する必要があります。POSTアノテーションの後にリクエストパスを追加したくない場合は、メソッドの最初のパラメーターに@Urlアノテーションを使用してリクエストパスを追加できます。
@Query メソッドに作用するパラメータは、クエリパラメータ、つまりリクエストパラメータを追加するために使用されます。パラメータ値は、String.valueOf()を介してStringに変換され、URLエンコードされます。このアノテーションで定義されたパラメータを使用すると、パラメータ値を空にすることができます。空の場合は無視してください。値
@QueryMap メソッドのパラメータに基づいて、クエリパラメータをマップの形式で追加します。つまり、リクエストパラメータです。パラメータのキーと値は、String.valueOf()を介して文字列形式に変換されます。マップのキーと値は、デフォルトでURLエンコードされ、マップ内の各アイテムはキーも値も空にすることはできません

データを正常に取得する
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/Android_Cob/article/details/108652824
おすすめ