码迷,mamicode.com
首页 > 其他好文 > 详细

Retrofit网络框架

时间:2017-01-19 07:45:10      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:响应   2.4.1   internet   nts   compile   body   str   text   tle   

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);
}

 

Retrofit网络框架

标签:响应   2.4.1   internet   nts   compile   body   str   text   tle   

原文地址:http://www.cnblogs.com/Oldz/p/6298776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!