一,首先加入依赖库,几种导入JAR包的方法,Gradle这个是比较简单直接的,我就用这个添加
compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.okhttp3:okhttp:3.3.1' compile 'com.squareup.retrofit2:converter-gson:2.1.0'
二,添加完这几个依赖后就可以进行操作了
这里我们先用的是Gank的接口http://gank.io/api/data/Android/10/1;我们先看下他的Json模型
1,简单的请求Demo
XML代码
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.network.Activity.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_requet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:text="请求"
android:textAllCaps="false"
android:textColor="@android:color/white"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
LinearLayout>
ScrollView>
Api接口
public interface GnakApi {
@GET("api/data/Android/10/1")
Call getAndroidInfo();
}
java代码
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://gank.io/")
.build();
GnakApi api = retrofit.create(GnakApi.class);
Call call = api.getAndroidInfo();
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
try {
String result = response.body().string();
Log.i(TAG, result);
tv_result.setText(result);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
之后可以点击运行即可,截图我就不上传,了;
2,有参请求
这里首先我们要导入Gsonformat这个插件,使用它一键生成实体Bean是比较方便的;
这里我们用的是聚合数据的天气接口,接口地址为:https://www.juhe.cn/docs/api/id/39;
这里的key是你申请接口时系统分配的key,当然我这个可以直接用;如果接口过期维护中,自己可以去申请个免费接口;
这个接口的拼接为http://op.juhe.cn/onebox/weather/index?format=2&cityname=上海&key=您申请的KEY
package com.example.administrator.network.model;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
/**
* Created by MrLuper on 2018/2/28 0028.
*/
public class WeatherDataBean {
/**
* resultcode : 200
* reason : 查询成功!
* result : {"sk":{"temp":"21","wind_direction":"西风","wind_strength":"2级","humidity":"4%","time":"14:25"},"today":{"city":"天津","date_y":"2014年03月21日","week":"星期五","temperature":"8℃~20℃","weather":"晴转霾","weather_id":{"fa":"00","fb":"53"},"wind":"西南风微风","dressing_index":"较冷","dressing_advice":"建议着大衣、呢外套加毛衣、卫衣等服装。","uv_index":"中等","comfort_index":"","wash_index":"较适宜","travel_index":"适宜","exercise_index":"较适宜","drying_index":""},"future":[{"temperature":"28℃~36℃","weather":"晴转多云","weather_id":{"fa":"00","fb":"01"},"wind":"南风3-4级","week":"星期一","date":"20140804"},{"temperature":"28℃~36℃","weather":"晴转多云","weather_id":{"fa":"00","fb":"01"},"wind":"东南风3-4级","week":"星期二","date":"20140805"},{"temperature":"27℃~35℃","weather":"晴转多云","weather_id":{"fa":"00","fb":"01"},"wind":"东南风3-4级","week":"星期三","date":"20140806"},{"temperature":"27℃~34℃","weather":"多云","weather_id":{"fa":"01","fb":"01"},"wind":"东南风3-4级","week":"星期四","date":"20140807"},{"temperature":"27℃~33℃","weather":"多云","weather_id":{"fa":"01","fb":"01"},"wind":"东北风4-5级","week":"星期五","date":"20140808"},{"temperature":"26℃~33℃","weather":"多云","weather_id":{"fa":"01","fb":"01"},"wind":"北风4-5级","week":"星期六","date":"20140809"},{"temperature":"26℃~33℃","weather":"多云","weather_id":{"fa":"01","fb":"01"},"wind":"北风4-5级","week":"星期日","date":"20140810"}]}
* error_code : 0
*/
private String resultcode;
private String reason;
private ResultBean result;
private int error_code;
public String getResultcode() {
return resultcode;
}
public void setResultcode(String resultcode) {
this.resultcode = resultcode;
}
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 {
/**
* sk : {"temp":"21","wind_direction":"西风","wind_strength":"2级","humidity":"4%","time":"14:25"}
* today : {"city":"天津","date_y":"2014年03月21日","week":"星期五","temperature":"8℃~20℃","weather":"晴转霾","weather_id":{"fa":"00","fb":"53"},"wind":"西南风微风","dressing_index":"较冷","dressing_advice":"建议着大衣、呢外套加毛衣、卫衣等服装。","uv_index":"中等","comfort_index":"","wash_index":"较适宜","travel_index":"适宜","exercise_index":"较适宜","drying_index":""}
* future : [{"temperature":"28℃~36℃","weather":"晴转多云","weather_id":{"fa":"00","fb":"01"},"wind":"南风3-4级","week":"星期一","date":"20140804"},{"temperature":"28℃~36℃","weather":"晴转多云","weather_id":{"fa":"00","fb":"01"},"wind":"东南风3-4级","week":"星期二","date":"20140805"},{"temperature":"27℃~35℃","weather":"晴转多云","weather_id":{"fa":"00","fb":"01"},"wind":"东南风3-4级","week":"星期三","date":"20140806"},{"temperature":"27℃~34℃","weather":"多云","weather_id":{"fa":"01","fb":"01"},"wind":"东南风3-4级","week":"星期四","date":"20140807"},{"temperature":"27℃~33℃","weather":"多云","weather_id":{"fa":"01","fb":"01"},"wind":"东北风4-5级","week":"星期五","date":"20140808"},{"temperature":"26℃~33℃","weather":"多云","weather_id":{"fa":"01","fb":"01"},"wind":"北风4-5级","week":"星期六","date":"20140809"},{"temperature":"26℃~33℃","weather":"多云","weather_id":{"fa":"01","fb":"01"},"wind":"北风4-5级","week":"星期日","date":"20140810"}]
*/
private SkBean sk;
private TodayBean today;
private List future;
public SkBean getSk() {
return sk;
}
public void setSk(SkBean sk) {
this.sk = sk;
}
public TodayBean getToday() {
return today;
}
public void setToday(TodayBean today) {
this.today = today;
}
public List getFuture() {
return future;
}
public void setFuture(List future) {
this.future = future;
}
public static class SkBean {
/**
* temp : 21
* wind_direction : 西风
* wind_strength : 2级
* humidity : 4%
* time : 14:25
*/
private String temp;
private String wind_direction;
private String wind_strength;
private String humidity;
private String time;
public String getTemp() {
return temp;
}
public void setTemp(String temp) {
this.temp = temp;
}
public String getWind_direction() {
return wind_direction;
}
public void setWind_direction(String wind_direction) {
this.wind_direction = wind_direction;
}
public String getWind_strength() {
return wind_strength;
}
public void setWind_strength(String wind_strength) {
this.wind_strength = wind_strength;
}
public String getHumidity() {
return humidity;
}
public void setHumidity(String humidity) {
this.humidity = humidity;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
public static class TodayBean {
/**
* city : 天津
* date_y : 2014年03月21日
* week : 星期五
* temperature : 8℃~20℃
* weather : 晴转霾
* weather_id : {"fa":"00","fb":"53"}
* wind : 西南风微风
* dressing_index : 较冷
* dressing_advice : 建议着大衣、呢外套加毛衣、卫衣等服装。
* uv_index : 中等
* comfort_index :
* wash_index : 较适宜
* travel_index : 适宜
* exercise_index : 较适宜
* drying_index :
*/
private String city;
private String date_y;
private String week;
private String temperature;
private String weather;
private WeatherIdBean weather_id;
private String wind;
private String dressing_index;
private String dressing_advice;
private String uv_index;
private String comfort_index;
private String wash_index;
private String travel_index;
private String exercise_index;
private String drying_index;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDate_y() {
return date_y;
}
public void setDate_y(String date_y) {
this.date_y = date_y;
}
public String getWeek() {
return week;
}
public void setWeek(String week) {
this.week = week;
}
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 WeatherIdBean getWeather_id() {
return weather_id;
}
public void setWeather_id(WeatherIdBean weather_id) {
this.weather_id = weather_id;
}
public String getWind() {
return wind;
}
public void setWind(String wind) {
this.wind = wind;
}
public String getDressing_index() {
return dressing_index;
}
public void setDressing_index(String dressing_index) {
this.dressing_index = dressing_index;
}
public String getDressing_advice() {
return dressing_advice;
}
public void setDressing_advice(String dressing_advice) {
this.dressing_advice = dressing_advice;
}
public String getUv_index() {
return uv_index;
}
public void setUv_index(String uv_index) {
this.uv_index = uv_index;
}
public String getComfort_index() {
return comfort_index;
}
public void setComfort_index(String comfort_index) {
this.comfort_index = comfort_index;
}
public String getWash_index() {
return wash_index;
}
public void setWash_index(String wash_index) {
this.wash_index = wash_index;
}
public String getTravel_index() {
return travel_index;
}
public void setTravel_index(String travel_index) {
this.travel_index = travel_index;
}
public String getExercise_index() {
return exercise_index;
}
public void setExercise_index(String exercise_index) {
this.exercise_index = exercise_index;
}
public String getDrying_index() {
return drying_index;
}
public void setDrying_index(String drying_index) {
this.drying_index = drying_index;
}
public static class WeatherIdBean {
/**
* fa : 00
* fb : 53
*/
private String fa;
private String fb;
public String getFa() {
return fa;
}
public void setFa(String fa) {
this.fa = fa;
}
public String getFb() {
return fb;
}
public void setFb(String fb) {
this.fb = fb;
}
}
}
public static class FutureBean {
/**
* temperature : 28℃~36℃
* weather : 晴转多云
* weather_id : {"fa":"00","fb":"01"}
* wind : 南风3-4级
* week : 星期一
* date : 20140804
*/
private String temperature;
private String weather;
private WeatherIdBean weather_id;
private String wind;
private String week;
private String 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 WeatherIdBean getWeather_id() {
return weather_id;
}
public void setWeather_id(WeatherIdBean weather_id) {
this.weather_id = weather_id;
}
public String getWind() {
return wind;
}
public void setWind(String wind) {
this.wind = wind;
}
public String getWeek() {
return week;
}
public void setWeek(String week) {
this.week = week;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public static class WeatherIdBean {
/**
* fa : 00
* fb : 53
*/
private String fa;
private String fb;
public String getFa() {
return fa;
}
public void setFa(String fa) {
this.fa = fa;
}
public String getFb() {
return fb;
}
public void setFb(String fb) {
this.fb = fb;
}
}
}
}
}
这个就是一键生成的实体Bean
接下来是接口
@POST("weather/index?")
Call<WeatherDataBean> getWeather(@QueryMap Map<String , String> params);
当然这里也可以使用Get请求,看你自己想怎么用了;
java代码
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://v.juhe.cn/")
.addConverterFactory(GsonConverterFactory.create())
.build();
WeatherApi api = retrofit.create(WeatherApi.class);
Map params = new HashMap<>();
params.put("format","2");
params.put("cityname", "上海");
params.put("key", "267d7cb87bd359a2bfea80560106615e");
//异步
api.getWeather(params).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
String info = response.body().getResult().getToday().getWeather();
tv_result.setText("上海天气:" + info);
}
@Override
public void onFailure(Call call, Throwable t) {
}
});