1.build.gradle中添加
compile
2.自定义Application
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);
x.Ext.setDebug(BuildConfig.DEBUG);
}
}
3.AndroidManifest.xml文件application节点添加
android:name=".BaseApplication"
4.单例模式Xutils3封装
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;
import java.io.File;
import java.util.Map;
public class XutilsHttp {
private volatile static XutilsHttp instance;
private Handler handler;
private XutilsHttp() {
handler = new Handler(Looper.getMainLooper());
}
/**
* 单利模式
*
* @return
*/
public static XutilsHttp getInstance() {
if (instance == null) {
synchronized (XutilsHttp.class) {
if (instance == null) {
instance = new XutilsHttp();
}
}
}
return instance;
}
/**
* 异步get请求返回结果,json字符串
*
* @param result
* @param callBack
*/
private void onSuccessResponse(final String result, final XCallBack callBack) {
handler.post(new Runnable() {
@Override
public void run() {
if (callBack != null) {
callBack.onResponse(result);
}
}
});
}
private void onFailResponse(final String result, final XCallBack callBack) {
handler.post(new Runnable() {
@Override
public void run() {
if (callBack != null) {
callBack.onFail(result);
}
}
});
}
private void onCancelResponse(final Callback.CancelledException cex, final XCallBack callBack) {
handler.post(new Runnable() {
@Override
public void run() {
if (callBack != null) {
callBack.onCancel(cex);
}
}
});
}
public interface XCallBack {
void onResponse(String result);
void onFail(String result);
void onCancel(Callback.CancelledException cex);
}
public interface XDownLoadCallBack {
void onstart();
void onLoading(long total, long current, boolean isDownloading);
void onSuccess(File result);
void onFail(String result);
void onFinished();
}
/**
* 普通get请求
*
* @param url
* @param maps
* @param callback
*/
public void get(String url, Map<String, String> maps, final XCallBack callback) {
RequestParams params = new RequestParams(url);
if (null != maps && !maps.isEmpty()) {
for (Map.Entry<String, String> entry : maps.entrySet()) {
params.addQueryStringParameter(entry.getKey(), entry.getValue());
}
}
x.http().get(params, new Callback.CommonCallback<String>() {
private boolean hasError = false;
private String result = null;
@Override
public void onSuccess(String result) {
if (result != null) {
this.result = result;
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
hasError = true;
Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
if (!hasError && result != null) {
onSuccessResponse(result, callback);
}
}
});
}
/**
* 带缓存数据的异步get请求
*
* @param url
* @param maps
* @param ifCache 是否缓存
* @param cacheTime 缓存存活时间
* @param callback
*/
public void getCache(String url, Map<String, String> maps, final boolean ifCache, long cacheTime, final XCallBack callback) {
RequestParams params = new RequestParams(url);
params.setCacheMaxAge(cacheTime);
if (null != maps && maps.isEmpty()) {
for (Map.Entry<String, String> entry : maps.entrySet()) {
params.addQueryStringParameter(entry.getKey(), entry.getValue());
}
}
x.http().get(params, new Callback.CacheCallback<String>() {
private boolean hasError = false;
private String result = null;
@Override
public boolean onCache(String result) {
if (ifCache && null != result) {
this.result = result;
}
return ifCache;
}
@Override
public void onSuccess(String result) {
if (result != null) {
this.result = result;
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
hasError = true;
Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
if (!hasError && result != null) {
onSuccessResponse(result, callback);
}
}
});
}
/**
* 异步post请求
*
* @param url
* @param maps
* @param callback
*/
public void post(String url, Map<String, String> maps, final XCallBack callback) {
RequestParams params = new RequestParams(url);
if (null != maps && !maps.isEmpty()) {
for (Map.Entry<String, String> entry : maps.entrySet()) {
params.addBodyParameter(entry.getKey(), entry.getValue());
}
}
x.http().post(params, new Callback.CommonCallback<String>() {
private boolean hasError = false;
private String result = null;
@Override
public void onSuccess(String result) {
if (result != null) {
this.result = result;
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
hasError = true;
onFailResponse(ex.getMessage(), callback);
}
@Override
public void onCancelled(CancelledException cex) {
onCancelResponse(cex, callback);
}
@Override
public void onFinished() {
if (!hasError && result != null) {
onSuccessResponse(result, callback);
}
}
});
}
/**
* 带缓存数据的异步post请求
*
* @param url
* @param maps
* @param ifCache 是否缓存
* @param cacheTime 缓存存活时间
* @param callback
*/
public void postCache(String url, Map<String, String> maps, final boolean ifCache, long cacheTime, final XCallBack callback) {
RequestParams params = new RequestParams(url);
params.setCacheMaxAge(cacheTime);
if (null != maps && maps.isEmpty()) {
for (Map.Entry<String, String> entry : maps.entrySet()) {
params.addBodyParameter(entry.getKey(), entry.getValue());
}
}
x.http().post(params, new Callback.CacheCallback<String>() {
private boolean hasError = false;
private String result = null;
@Override
public boolean onCache(String result) {
if (ifCache && null != result) {
this.result = result;
}
return ifCache;
}
@Override
public void onSuccess(String result) {
if (result != null) {
this.result = result;
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
hasError = true;
Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
if (!hasError && result != null) {
onSuccessResponse(result, callback);
}
}
});
}
/**
* 下载文件
*
* @param url
* @param filePath
* @param callback
*/
public void downFile(String url, String filePath, final XDownLoadCallBack callback) {
RequestParams params = new RequestParams(url);
params.setSaveFilePath(filePath);
params.setAutoRename(true);
x.http().get(params, new Callback.ProgressCallback<File>() {
@Override
public void onSuccess(final File result) {
handler.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onSuccess(result);
}
}
});
}
@Override
public void onError(final Throwable ex, boolean isOnCallback) {
handler.post(new Runnable() {
@Override
public void run() {
if (null != callback) {
callback.onFail(ex.getMessage());
}
}
});
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
handler.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onFinished();
}
}
});
}
@Override
public void onWaiting() {
}
@Override
public void onStarted() {
handler.post(new Runnable() {
@Override
public void run() {
if (null != callback) {
callback.onstart();
}
}
});
}
@Override
public void onLoading(final long total, final long current, final boolean isDownloading) {
handler.post(new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onLoading(total, current, isDownloading);
}
}
});
}
});
}
/**
* 文件上传
*
* @param url
* @param maps
* @param file
* @param callback
*/
public void upLoadFile(String url, Map<String, String> maps, Map<String, File> file, final XCallBack callback) {
RequestParams params = new RequestParams(url);
if (maps != null && !maps.isEmpty()) {
for (Map.Entry<String, String> entry : maps.entrySet()) {
params.addBodyParameter(entry.getKey(), entry.getValue());
}
}
if (file != null) {
for (Map.Entry<String, File> entry : file.entrySet()) {
params.addBodyParameter(entry.getKey(), entry.getValue().getAbsoluteFile());
}
}
params.setMultipart(true);
x.http().post(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
onSuccessResponse(result, callback);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
onCancelResponse(cex, callback);
}
@Override
public void onFinished() {
}
});
}
/**
* 上传Json串到服务器
*
* @param url
* @param maps 将需要传的各个参数放在Map集合里面
*/
public void upLoadJson(String url, Map<String, String> maps, final XCallBack callback) {
JSONObject js_request = new JSONObject();
try {
for (Map.Entry<String, String> entry : maps.entrySet()) {
js_request.put(entry.getKey(), entry.getValue());
}
} catch (JSONException e) {
e.printStackTrace();
}
RequestParams params = new RequestParams(url);
params.setAsJsonContent(true);
params.setBodyContent(js_request.toString());
x.http().post(params, new Callback.CommonCallback<String>() {
private boolean hasError = false;
private String result = null;
@Override
public void onSuccess(String result) {
if (result != null) {
this.result = result;
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
ex.printStackTrace();
}
@Override
public void onCancelled(CancelledException cex) {
onCancelled(cex);
}
@Override
public void onFinished() {
if (!hasError && result != null && callback != null) {
onSuccessResponse(result, callback);
}
}
});
}
}
5.使用方法
5.1 POST/GET请求
Map<String, String> map = new HashMap<>();
map.put("username", username);
map.put("password", password);
XutilsHttp.getInstance().post("http://000.000.000.000/index.php?s=/app/login/login", map, new XutilsHttp.XCallBack() {
@Override
public void onResponse(String result) {
}
@Override
public void onFail(String result) {
}
@Override
public void onCancel(Callback.CancelledException cex) {
}
});
5.2 文件下载
String url = ".............";
final String filepath = Environment.getExternalStorageDirectory() + "/lll/avatar/01.png";
XutilsHttp.getInstance().downFile(url, filepath, new
XutilsHttp.XDownLoadCallBack() {
@Override
public void onstart() {
}
@Override
public void onLoading(long total, long current, boolean isDownloading) {
}
@Override
public void onSuccess(File result) {
}
@Override
public void onFail(String result) {
}
@Override
public void onFinished() {
}
});