Skip to content

常见功能及问题

Jianbo Peng edited this page Mar 16, 2016 · 11 revisions

常见功能

1、Activity/Fragment销毁后如何结束请求,避免出现空指针异常

  • 方法一

    通过拦截事件回调方式达到目的。

    1)、在BaseActivity或BaseFragment中继承HttpCycleContext接口

    2)、添加字段

    protected final String HTTP_TASK_KEY = "HttpTaskKey_" + hashCode();

    3)、实现getHttpTaskKey方法

    @Override
    public String getHttpTaskKey() {
        return HTTP_TASK_KEY;
    }

    4)、在onDestroy中添加

    HttpTaskHandler.getInstance().removeTask(HTTP_TASK_KEY);

    优点: 省心,代码量少

  • 方法二

    在页面onDestroy中执行cancel请求

    HttpRequest.cancel(url);

    执行完成的请求cancel不了


2、如何请求applicationJson接口

  • 方法一
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", "myname");
jsonObject.put("password", "123456");
    
RequestParams params = new RequestParams(this);
params.applicationJson(jsonObject);

HttpRequest.post(Api.LOGIN, params, new JsonHttpRequestCallback());
  • 方法二(不推荐)

通过addFormDataPart添加字段生成JSONObject

RequestParams params = new RequestParams(this);
params.addFormDataPart("username", "myname");
params.addFormDataPart("password", "123456");
params.applicationJson(null);
    
HttpRequest.post(Api.LOGIN, params, new JsonHttpRequestCallback());
  • 方法三

通过setCustomRequestBody

JSONObject jsonObject = new JSONObject();
jsonObject.put("username", "myname");
jsonObject.put("password", "123456");

RequestParams params = new RequestParams(this);
params.setCustomRequestBody(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonObject.toJSONString()));
  • 方法四
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", "myname");
jsonObject.put("password", "123456");

RequestParams params = new RequestParams(this);
params.setRequestBody(MediaType.parse("application/json; charset=utf-8"), jsonObject.toJSONString());

3、修改编码

在OkHttpFinal中默认是采用UTF-8编码,开发者可以通过公共参数来修改编码

Headers commonHeaders = new Headers.Builder().add("charset", "GB2312").build();
OkHttpFinalConfiguration.Builder builder = new OkHttpFinalConfiguration.Builder()
.setCommenHeaders(commonHeaders);
OkHttpFinal.getInstance().init(builder.build());

常见问题

1、OkHttpFinal内部使用的是fastjson android版本,如果开发者是本身已经使用了fastjson web版,建议开发者统一使用fastjson android版本

2、如果编译的时候出现 这样的错误,请在你项目的build.gralde中加上以下语句

android {
	packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
        exclude 'META-INF/ASL2.0'
    }
}