Android 实现Retrofit2.0请求网络

第一步:添加依赖

compile 'com.google.code.gson:gson:2.3'

compile 'com.squareup.retrofit:retrofit:retrofit.0-beta1'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'  
compile 'com.squareup.okhttp:okhttp:2.4.0'

因为Retrofit2.0封装的是okhttp所有也要添加ok的依赖

第二步:添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

第三步:创建一个接口用来描述网络请求

以上我们的准备工作就完成了下面开始正式写代码

我们要知道Retrofit把 网络请求的URL 分成了两部分设置:

这里用一个GET请求来举个栗子

// 第1部分:在网络请求接口的注解设置

@GET("/users/Guolei1130")
Call<ResponseBody> getLohinInfo();

// 第2部分:在创建Retrofit实例时通过.baseUrl()设置

Retrofit retrofit=new Retrofit.Builder()
        .baseUrl("http://120.27.23.105") //设置网络请求的Url地址
        .addConverterFactory(GsonConverterFactory.create())//设置数据解析器
        .build();
下面介绍GET的请求

@GET("users/{username}")
Call<LoginBean> getLogin(@Path("username") String user);
这里的user的值将赋给上面的{username}

这两是一个有参数一个没有参数 还有大家可能注意到了Call<这里的泛型不一样>因为 retrofit 2.0可以直接返回一个bean类的实体如果你没有bean类的话就可以放入 ResponseBody返回的是请求下来的json字符串

然后使用retrofit来调用create传入你之前定义的接口

APIInterface  apiInterface = retrofit.create(APIInterface.class);
请求结果分别为
Call<ResponseBody> call = immortal.getLohinInfo();
call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        try {
            Toast.makeText(MainActivity.this,response.body().string()+"",Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {

    }
});
Call<LoginBean>  = immortal.getLogin("Guolei1130");
call.enqueue(new Callback<LoginBean>() {
    @Override
    public void onResponse(Call<LoginBean> call, Response<LoginBean> response) {
        Toast.makeText(MainActivity.this,response.body().getId()+"",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onFailure(Call<LoginBean> call, Throwable t) {

    }
});

然后说一下POST的实现

POST的实现在这里见到介绍两种好用的

//http://120.27.23.105/product/getProductCatagory?cid=2(这个网址可以使用)
@POST("/onebox/basketball/nba")
@FormUrlEncoded
Call<DataClassBean> getCall( @Field("key") String k);

@POST("/product/getProductCatagory")
@FormUrlEncoded
Call<DataClassBean> getCalls(@FieldMap Map<String, Object> args);
// 具体使用
// @Field
Call<ResponseBody> call1 = service.testFormUrlEncoded1("2");

// @FieldMap
// 实现的效果与上面相同,但要传入Map
Map<String, Object> map = new HashMap<>();
    map.put("cid", "2");
Call<ResponseBody> call2 = service.testFormUrlEncoded2(map);
最后是发送网络请求

//发送网络请求(异步)
        call.enqueue(new Callback<Translation>() {
            //请求成功时回调
            @Override
            public void onResponse(Call<Translation> call, Response<Translation> response) {
                //请求处理,输出结果
                response.body().show();
            }

            //请求失败时候的回调
            @Override
            public void onFailure(Call<Translation> call, Throwable throwable) {
                System.out.println("连接失败");
            }
        });

// 发送网络请求(同步)
        Response<Reception> response = call.execute();
以上是Retrofit2.0的简单实现

如果各位还想更深入了解给大家推荐两个网址

http://blog.csdn.net/carson_ho/article/details/73732076

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1016/3588.html


                
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值