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的依赖

第二步:添加网络权限

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

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

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

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

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

@GET("/users/Guolei1130")
Call 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 getLogin(@Path("username") String user);
这里的user的值将赋给上面的{username}

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

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

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

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

    }
});


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

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

    }
});

然后说一下POST的实现

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

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

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

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

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

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

// 发送网络请求(同步)
        Response 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


你可能感兴趣的:(Android 实现Retrofit2.0请求网络)