网络框架-retrofit,okhttp

retrofit的简单介绍:

Retrofit是针对于Android/Java的、基于okHttp的、一种轻量级且安全的、并使用注解方式的网络请求框架。

okHttp和Retrofit都是square公司推出的开源项目。

优点:

--可以配置不同HTTP client来实现网络请求,如okhttphttpclient

--动态代理,用注解来生成请求参数,简化URL拼写,简单易懂

--支持同步、异步和RxJava

--超级解耦

--可以配置不同的反序列化工具来解析数据,如jsonxml

--框架使用了很多设计模式

缺点:

--不能接触序列化实体和响应数据

--执行的机制太严格

--使用转换器比较低效

--只能支持简单自定义参数类型


retrofit发送get请求的简单示例:

1.配置网络权限

2.配置依赖:

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

3.封装请求路径:

public class ApiUrls {
    public static final String BASE_URL = "http://192.168.1.103:8080/TakeoutService/";
    public static final String HOME = "home";
}

4.创建http请求的api接口

public interface TakeOutApi {
    //里面传入的是请求路径
    @GET(ApiUrls.HOME)
    Call<ResponseInfo> getHomeData();//调用getHomeData()方法可以拿到HOME路径
}

5.创建retrofit对象,然后调用create()得到接口实例

得到接口实例是每一次请求网络都要做的事情,所以应该抽取成一个类,方便调用

/**
 * 获取Api接口实例
 * @return TakeOutApi Api接口实例
 */
public class HttpUtils {
    private static TakeOutApi takeOutApi;
    public static TakeOutApi getApi() {
        if (takeOutApi == null) {
            //创建retrofit实例
            Retrofit retrofit = new Retrofit.Builder()
                    //配置主机地址
                    .baseUrl(ApiUrls.BASE_URL)
                    //解析json数据(转化工厂:将json转化成对象)
                    .addConverterFactory(GsonConverterFactory.create(new Gson()))
                    .build();
            //retrofit.create(接口.class)调用之后会得到接口上的参数HOME然后拼接到baseUrl尾部
            takeOutApi = retrofit.create(TakeOutApi.class);
        }
        return takeOutApi;
    }
}

6.MainActivity--用接口实例调用方法得到Call

Call<ResponseInfo> call = HttpUtils.getApi().getHomeData();

7.MainActivity--异步执行请求

call.enqueue(callback);

需要一个callback回调:

 

首先封装一个响应json数据的一个beanResponseInfo

public class ResponseInfo {
    public String code;
    public String data;
}

回调

Callback<ResponseInfo> callback = new Callback<ResponseInfo>() {
    @Override
    public void onResponse(Call<ResponseInfo> call, Response<ResponseInfo> response) {
        ResponseInfo body = response.body();
        String json = body.data;//得到data数据
        Log.e(TAG, "请求成功: " + json);
    }
    @Override
    public void onFailure(Call<ResponseInfo> call, Throwable t) {
        Log.e(TAG, "请求失败: " + t);
    }
};

在这里我们就可以在log里面看到请求到的数据了。

 

为了让代码更加清晰易懂,可以封装一下回调:

》创建Callback子类SimpleCallback

public class SimpleCallback implements Callback<ResponseInfo> {
    @Override
    public void onResponse(Call<ResponseInfo> call, Response<ResponseInfo> response) {
        ResponseInfo body = response.body();
        String json = body.data;
        if (TextUtils.isEmpty(json)) {
            showError(0, new RuntimeException("取得的数据为空"));
        } else {
            showData(1, json);
        }
    }
    @Override
    public void onFailure(Call<ResponseInfo> call, Throwable t) {
        showError(-1, t);
    }
     //显示错误的方法
    protected void showError(int i, Throwable t) {}
     //显示数据的方法
    protected void showData(int i, String json) {}
}

MainActivity--回调:

SimpleCallback callback = new SimpleCallback() {
    @Override
    protected void showError(int i, Throwable t) {
        super.showError(i, t);
        Toast.makeText(MainActivity.this, "请求网络失败", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void showData(int i, String json) {
        super.showData(i, json);
        Toast.makeText(MainActivity.this, "请求到数据", Toast.LENGTH_SHORT).show();
        Log.e(TAG, "请求到数据: " + json);
    }
};


okhttp读取json文件示例

1.添加网络权限。


2.添加依赖:

compile 'com.squareup.okhttp:okhttp:2.0.0'


3.用okhttp读取网络json文件:

-创建OkHttpClient实例

-创建请求

-异步回调

private void loadJson(String path) {//path就url接口
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder().url(path).build();
    Call call = client.newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Request request, IOException e) {
            Log.e(TAG, "请求失败" + e);
        }

        @Override
        public void onResponse(Response response) throws IOException {
            String json = response.body().string();
            Log.e(TAG, "请求成功 ,json数据:" + json);
            processData(json);//解析json数据
        }
    });
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值