package com.netease.nim.uikit.common.http;
import android.content.Context;
import android.os.Handler;
import com.netease.nim.uikit.common.framework.NimTaskExecutor;
import java.util.Map;
/**
* Created by huangjun on 2015/3/6.
*/
public class NimHttpClient {
/**
* *********************** Http Task & Callback *************************
*/
public interface NimHttpCallback {
void onResponse(String response, int code, Throwable e);
}
public class NimHttpTask implements Runnable {
private String url;
private Map<String, String> headers;
private String jsonBody;
private NimHttpCallback callback;
private boolean post;
public NimHttpTask(String url, Map<String, String> headers, String jsonBody, NimHttpCallback callback) {
this(url, headers, jsonBody, callback, true);
}
public NimHttpTask(String url, Map<String, String> headers, String jsonBody, NimHttpCallback callback, boolean post) {
this.url = url;
this.headers = headers;
this.jsonBody = jsonBody;
this.callback = callback;
this.post = post;
}
@Override
public void run() {
final HttpClientWrapper.HttpResult<String> result = post ?
HttpClientWrapper.post(url, headers, jsonBody) : HttpClientWrapper.get(url, headers);
// do callback on ui thread
uiHandler.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onResponse(result.obj, result.code, result.e);
}
}
});
}
}
/**
* ************************ Single instance **************************
*/
private static NimHttpClient instance;
public synchronized static NimHttpClient getInstance() {
if (instance == null) {
instance = new NimHttpClient();
}
return instance;
}
private NimHttpClient() {
}
/**
* **************** Http Config & Thread pool & Http Client ******************
*/
private boolean inited = false;
private NimTaskExecutor executor;
private Handler uiHandler;
public void init(Context context) {
if (inited) {
return;
}
// init thread pool
executor = new NimTaskExecutor("NIM_HTTP_TASK_EXECUTOR", new NimTaskExecutor.Config(1, 3, 10 * 1000, true));
uiHandler = new Handler(context.getMainLooper());
inited = true;
}
public void release() {
if (executor != null) {
executor.shutdown();
}
}
public void execute(String url, Map<String, String> headers, String body, NimHttpCallback callback) {
execute(url, headers, body, true, callback);
}
public void execute(String url, Map<String, String> headers, String body, boolean post, NimHttpCallback callback) {
if (!inited) {
return;
}
executor.execute(new NimHttpTask(url, headers, body, callback, post));
}
}