JDK 7以上 Android 2.3以上
自动实现json到javabean的装换,是对OKHttp的增强版,底层包装了Gson框架,但是必须new 一个Gson对象
主要掌握注解 @GET("home") @Query("index") @FormUrlEncoded @Field("username")等
自己的思路步骤:
1,创建retrofit对象,并设置retrofit的参数 和转换的Gson
2,提取工程所需要的网络请求方法 get( ) login( ) 等,到接口Api中,retrofit对接口进行处理
3,retrofit 处理接口中(包括接口中的方法),得到请求对象
4,编写回调对象逻辑,callback
具体实现Demo :
compile ‘com.squareup.retrofit2:retrofit:2.1.0‘ compile ‘com.squareup.retrofit2:converter-gson:2.1.0‘ //json到javaBean的转换
配置权限
<uses-permission android:name="android.permission.INTERNET" />
MyApi 接口
public interface GoogleMarketApi { //http://127.0.0.1:8090/home?index=0 //注解@GET:指定求方式 与请求路径 //@Query是用来设置GET 请求参数变量名 //返回值泛型是用来指定new Gson().fromJson(json,clz) //指定Call 该方法就可以运行子线程,代表异步请求 @GET("home") Call<HomeData> getHomeData( @Query("index") String index); //@QueryMap指定map集合为get请求参数 @GET("home") Call<HomeData> getHomeData( @QueryMap HashMap<String,String> map); //http://192.168.79.28:8080/webapi/post?username=itheima&password=123 //@POST标注当前方法 使用POST请求 //@Field用来标注post请求参数名 //@FormUrlEncoded与@Post配合使用,要求对post的参数进行网络编码 @FormUrlEncoded @POST("post") Call<LoginData> login(@Field("username")String username,@Field("password") String pwd); // @FieldMap用来标注map为Post请求的参数 @FormUrlEncoded @POST("post") Call<LoginData> login(@FieldMap HashMap<String,String> params); }
MainActivity.java 中的方法
public void request(View view) { //步骤二。开始使用retrofit发送请求 //2.1.初始化框架 AlertDialog.Builder setTitle与 Retrofit.Builder比较 前者 快速创建对话 后者 快速初始化retrofit框架 String baseUrl="http://192.168.79.28:8080/webapi/";//retrofit要求以/结束,否则会产生错误 Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl)//设置项目路径 其它路径都改成相对路径 与ApiUrls HOST HOME=HOST+"/home"/ .addConverterFactory(GsonConverterFactory.create(new Gson()))//convert就是将json解析成javaBean .build();//执行创建方法 //2.2.调用retrofit框架去读到一个请求需要的全部参数,参数都是注解或者泛型来标注 GoogleMarketApi googleMarketApi = retrofit.create(GoogleMarketApi.class);//读取请求方式 请求页面 返回参数 //2.3.可以获取一个异步方法 // Call<LoginData> method = googleMarketApi.login("itheima", "123"); HashMap<String, String> params=new HashMap<>(); params.put("username","itheima"); params.put("password","123"); Call<LoginData> method = googleMarketApi.login(params); //2.4.执行子线程,处理服务端返回数据 都是将数据传给回调对象(空方法,给开发者编写业务逻辑,注意条件) Callback<LoginData> callback=new Callback<LoginData>() { //2.4.1.处理请求成功的业务逻辑 @Override public void onResponse(Call<LoginData> call, Response<LoginData> response) { //2.4.2.从响应里面获取解析后的javaBean LoginData data = response.body(); if (data != null) { textView.setText(data.data); } } //2.4.3.处理请求失败的业务逻辑 @Override public void onFailure(Call<LoginData> call, Throwable t) { t.printStackTrace(); textView.setText(t.getMessage()); } }; method.enqueue(callback); }
时间: 2024-11-25 13:13:00