1.引入资源库
// Retrofit https://www.jianshu.com/p/8066ae4fb1b2 api "com.squareup.retrofit2:retrofit:2.3.0" api "com.squareup.retrofit2:converter-gson:2.3.0" api "com.squareup.retrofit2:adapter-rxjava2:2.3.0" // OkHttp3 api "com.squareup.okhttp3:okhttp:3.10.0" api "com.squareup.okhttp3:logging-interceptor:3.10.0" // RxJava2 api "io.reactivex.rxjava2:rxjava:2.1.9" api "io.reactivex.rxjava2:rxandroid:2.0.2" // RxLifecycle api "com.trello.rxlifecycle2:rxlifecycle:2.2.1" api "com.trello.rxlifecycle2:rxlifecycle-android:2.2.1" api "com.trello.rxlifecycle2:rxlifecycle-components:2.2.1"
2.开始编写基础类RetrofitManager.class
public class RetrofitManager { static Retrofit retrofit = new Retrofit.Builder() .baseUrl(“http://www.123.com/”)//这里写访问地址的前半部分,举个例子,如果是http//www.123.com/111,此处就写“http://www.123.com/” .addConverterFactory(GsonConverterFactory.create())//这行代码是增加Gson的转换方法,可以直接把请求到的结果转换成Bean(根据需要,可以删除) .build(); public static Retrofit getRetrofit() { return retrofit; } }
3.创建API.class文件---GET请求
4.使用GET方式调用网络请求
5.创建API.class文件---POST请求
6.使用POST方式调用网络请求
上面是Retrofi的简单用法,下面是一些其他用法,因为企业都是用post的方法进行的请求,所以例子我都用post来写
1.带有Header的POST请求:
API文件中写:
@FormUrlEncoded @POST("111")//这里写地址的后半部分,例如全地址是"http://www.123.com/111",这里就写"111" Call<ResponseBody>postResult(@FieldMap Map<String,String>params,@HeaderMap Map<String,String>headermap);
网络请求界面写:
private void httpPOST() { API api=RetrofitManager.getRetrofit().create(API.class); Map<String,String>params=new HashMap<>();//post请求时需要的参数 params.put("key","value"); params.put("key","value"); Map<String,String>headermap=new HashMap<>();//header需要的参数 headermap.put("header需要的key","header需要的value"); headermap.put("header需要的key","header需要的value"); retrofit2.Call<ResponseBody> resultcall=api.postResult(params,headermap); resultcall.enqueue(new retrofit2.Callback<ResponseBody>() { @Override public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) { //网络请求成功 try { int httpcode=response.code();//获取返回的code,值为200时证明请求成功 String result=response.body().string();//得到网络请求的结果 } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) { //网络请求失败 } }); }
2.使用本地编写的bean接收网络请求返回的信息
2.1-API
@FormUrlEncoded @POST("111")//这里写地址的后半部分,例如全地址是"http://www.123.com/111",这里就写"111" Call<textBean>postResult(@FieldMap Map<String,String>params);
2.2-textBean.class(这个bean可以根据后台提供的返回值自己进行编写)
public class textBean { /** * word_name : good * is_CRI : 1 * exchange : {"word_pl":["goods"],"word_third":"","word_past":"","word_done":"","word_ing":"","word_er":["better"],"word_est":["best"]} * symbols : [{"ph_en":"gʊd","ph_am":"ɡʊd","ph_other":"","ph_en_mp3":"http://res.iciba.com/resource/amp3/oxford/0/28/a2/28a24294fed307cf7e65361b8da4f6e5.mp3","ph_am_mp3":"http://res.iciba.com/resource/amp3/1/0/75/5f/755f85c2723bb39381c7379a604160d8.mp3","ph_tts_mp3":"http://res-tts.iciba.com/7/5/5/755f85c2723bb39381c7379a604160d8.mp3","parts":[{"part":"adj.","means":["好的","优秀的","有益的","漂亮的,健全的"]},{"part":"n.","means":["好处,利益","善良","善行","好人"]},{"part":"adv.","means":["同well"]}]}] */ private String word_name; private String is_CRI; private ExchangeBean exchange; private List<SymbolsBean> symbols; public String getWord_name() { return word_name; } public void setWord_name(String word_name) { this.word_name = word_name; } public String getIs_CRI() { return is_CRI; } public void setIs_CRI(String is_CRI) { this.is_CRI = is_CRI; } public ExchangeBean getExchange() { return exchange; } public void setExchange(ExchangeBean exchange) { this.exchange = exchange; } public List<SymbolsBean> getSymbols() { return symbols; } public void setSymbols(List<SymbolsBean> symbols) { this.symbols = symbols; } public static class ExchangeBean { /** * word_pl : ["goods"] * word_third : * word_past : * word_done : * word_ing : * word_er : ["better"] * word_est : ["best"] */ private String word_third; private String word_past; private String word_done; private String word_ing; private List<String> word_pl; private List<String> word_er; private List<String> word_est; public String getWord_third() { return word_third; } public void setWord_third(String word_third) { this.word_third = word_third; } public String getWord_past() { return word_past; } public void setWord_past(String word_past) { this.word_past = word_past; } public String getWord_done() { return word_done; } public void setWord_done(String word_done) { this.word_done = word_done; } public String getWord_ing() { return word_ing; } public void setWord_ing(String word_ing) { this.word_ing = word_ing; } public List<String> getWord_pl() { return word_pl; } public void setWord_pl(List<String> word_pl) { this.word_pl = word_pl; } public List<String> getWord_er() { return word_er; } public void setWord_er(List<String> word_er) { this.word_er = word_er; } public List<String> getWord_est() { return word_est; } public void setWord_est(List<String> word_est) { this.word_est = word_est; } } public static class SymbolsBean { /** * ph_en : gʊd * ph_am : ɡʊd * ph_other : * ph_en_mp3 : http://res.iciba.com/resource/amp3/oxford/0/28/a2/28a24294fed307cf7e65361b8da4f6e5.mp3 * ph_am_mp3 : http://res.iciba.com/resource/amp3/1/0/75/5f/755f85c2723bb39381c7379a604160d8.mp3 * ph_tts_mp3 : http://res-tts.iciba.com/7/5/5/755f85c2723bb39381c7379a604160d8.mp3 * parts : [{"part":"adj.","means":["好的","优秀的","有益的","漂亮的,健全的"]},{"part":"n.","means":["好处,利益","善良","善行","好人"]},{"part":"adv.","means":["同well"]}] */ private String ph_en; private String ph_am; private String ph_other; private String ph_en_mp3; private String ph_am_mp3; private String ph_tts_mp3; private List<PartsBean> parts; public String getPh_en() { return ph_en; } public void setPh_en(String ph_en) { this.ph_en = ph_en; } public String getPh_am() { return ph_am; } public void setPh_am(String ph_am) { this.ph_am = ph_am; } public String getPh_other() { return ph_other; } public void setPh_other(String ph_other) { this.ph_other = ph_other; } public String getPh_en_mp3() { return ph_en_mp3; } public void setPh_en_mp3(String ph_en_mp3) { this.ph_en_mp3 = ph_en_mp3; } public String getPh_am_mp3() { return ph_am_mp3; } public void setPh_am_mp3(String ph_am_mp3) { this.ph_am_mp3 = ph_am_mp3; } public String getPh_tts_mp3() { return ph_tts_mp3; } public void setPh_tts_mp3(String ph_tts_mp3) { this.ph_tts_mp3 = ph_tts_mp3; } public List<PartsBean> getParts() { return parts; } public void setParts(List<PartsBean> parts) { this.parts = parts; } public static class PartsBean { /** * part : adj. * means : ["好的","优秀的","有益的","漂亮的,健全的"] */ private String part; private List<String> means; public String getPart() { return part; } public void setPart(String part) { this.part = part; } public List<String> getMeans() { return means; } public void setMeans(List<String> means) { this.means = means; } } } }
2.3-网络请求
private void httpPOST() { API api = RetrofitManager.getRetrofit().create(API.class); Map<String, String> params = new HashMap<>();//post请求时需要的参数 params.put("key", "value"); params.put("key", "value"); retrofit2.Call<textBean> resultcall = api.postResult(params); resultcall.enqueue(new retrofit2.Callback<textBean>() { @Override public void onResponse(retrofit2.Call<textBean> call, retrofit2.Response<textBean> response) { //网络请求成功 int httpcode = response.code();//获取返回的code,值为200时证明请求成功 textBean bean = response.body();//得到网络请求的结果 String wordname = bean.getWord_name();//获取bean里面需要的值 } @Override public void onFailure(retrofit2.Call<textBean> call, Throwable t) { //网络请求失败 } }); }