1、网络、图片框架介绍,retrofit(需要okhttp和oki)、glide
1.接口地址拼接,baseurl以/结尾,@get()内部要以字母开头
2.get请求的操作
1.@GET设置get的请求方式
2.@Query 动态设置get请求参数
3.{method} @Path动态设置接口后缀
4.@QueryMap 使用集合的形式传递数据
3.post请求操作
1.@post:设置post请求,必须要设置encode,@formUrlencoded
2.@Field 设置post请求参数
3.@FieldMap:设置post请求的集合参数
4.@headers静态设置请求头,@header动态设置请求头
使用:
1、
compile 'com.squareup.retrofit2:retrofit:2.3.0'
2、创建接口
//1、创建接口 public interface Result { @GET("home") Call<ResponseBody> gethome(); }
3、
//使用retrofit获取接口数据 //2、创建出retrofit对象进行网络访问 Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl).build(); Result result = retrofit.create(Result.class); Call<ResponseBody> call = result.gethome(); // call.execute(); 这是同步请求,一定是这个方法有回调后才能执行下面的代码 // 这是异步请求,重新开启子线程进行网络请求好使操作 call.enqueue(new Callback<ResponseBody>() { //返回成功:只代表服务器有响应 @Override public void onResponse(Response<ResponseBody> response, Retrofit retrofit) { try { String json = response.body().string();//一次请求一次回掉 //注意需要网络请求权限 System.out.println(json); } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(Throwable throwable) { } });
4、接口拼接注意问题
5、接口方法中可以有多个方法。
1\接口写死的参数方法
在接口中添加
//在接口地址上写死参数 @GET("search?page=0&pageNum=10&orderby=saleDown&keyword=奶粉") Call<ResponseBody> getSearch();
在主线程中
Call<ResponseBody> call = result.getSearch(); // call.execute(); 这是同步请求,一定是这个方法有回调后才能执行下面的代码 // 这是异步请求,重新开启子线程进行网络请求好使操作 call.enqueue(new Callback<ResponseBody>() { //返回成功:只代表服务器有响应 @Override public void onResponse(Response<ResponseBody> response, Retrofit retrofit) { try { String json = response.body().string();//一次请求一次回掉 //注意需要网络请求权限 System.out.println(json); } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(Throwable throwable) { } });
2\接口中方法动态设置参数方法
在接口中
//动态设置接口参数@query 是注解直接将参数加载在search后面,一定要与我们接口文档中一模一样 @GET("search") Call<ResponseBody> getSearch(@Query("page") int page, @Query("pageNum") int pageNum, @Query("orderby") String orderby, @Query("keyword") String keyword);
在主方法中
Call<ResponseBody> call = result.getSearch(1, 10, "saleDown", "奶粉"); // call.execute(); 这是同步请求,一定是这个方法有回调后才能执行下面的代码 // 这是异步请求,重新开启子线程进行网络请求好使操作 call.enqueue(new Callback<ResponseBody>() { //返回成功:只代表服务器有响应 @Override public void onResponse(Response<ResponseBody> response, Retrofit retrofit) { try { String json = response.body().string();//一次请求一次回掉 //注意需要网络请求权限 System.out.println(json); } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(Throwable throwable) { } });
3\
//动态设置接口后缀 {methodName}随便写的名字 @GET("{methodName}") Call<ResponseBody> getSearch(@Path("methodName") String methodName, @Query("page") int page, @Query ("pageNum") int pageNum, @Query("orderby") String orderby, @Query("keyword") String keyword);
Call<ResponseBody> call = result.getSearch("search",1, 10, "saleDown", "奶粉");
4\
//接口参数太多了,使用map集合的形式一次性传递数据 @GET("{methodName}") Call<ResponseBody> getSearch(@Path("methodName") String methodName, @QueryMap Map<String, String> datas);
Map<String, String> datas = new HashMap<>(); datas.put("page", "0"); datas.put("pageNum", "10"); datas.put("orderby", "saleDown"); datas.put("keyword", "奶粉"); Call<ResponseBody> call = result.getSearch("search", datas);
5\post
//post请求登入接口 @FormUrlEncoded//post请求必须加上encoded注解 @POST("login") Call<ResponseBody> getLogin(@Field("username") String username, @Field("password") String password); @FormUrlEncoded//post请求必须加上encoded注解 @POST("{name}") Call<ResponseBody> getLogin(@Path("name") String name, @Field("username") String username, @Field("password") String password); @FormUrlEncoded//post请求必须加上encoded注解 @POST("{name}") Call<ResponseBody> getLogin(@Path("name") String name, @FieldMap Map<String, String> dates);
// Call<ResponseBody> call = result.getLogin("test", "test"); // Call<ResponseBody> call = result.getLogin("login","test", "test"); Map<String, String> datas = new HashMap<>(); datas.put("username", "test"); datas.put("password", "test"); Call<ResponseBody> call = result.getLogin("login", datas);
6\账户中心
//账户中心 添加请求头 静态设置请求头 @Headers("userid:20428") @GET("userinfo") Call<ResponseBody> getUserInfo(); //账户中心 添加请求头 动态设置请求头 @GET("userinfo") Call<ResponseBody> getUserInfo(@Header("userid") int userid);
// Call<ResponseBody> call = result.getUserInfo(); Call<ResponseBody> call = result.getUserInfo(20428);