1.簡介
Android中網絡請求一般使用Apache HTTP Client或者采用HttpURLConnection,但是直接使用這兩個類庫需要寫大量的代碼才能完成網絡post和get請求,而使用這個MyHttpUtils庫可以大大的簡化操作,它是基於HttpURLConnection,所有的請求都是獨立在UI主線程之外,沒有通過CommCallback回調方法處理請求結果, 沒有了子線程、沒有了handle,鏈式的變成使得代碼更加清晰 。
2.特性
- 支持get、post請求,文件下載,上傳等;
- 支持http和https的協議;
- 支持設置連接、讀取超時時間(可選);
- 支持json格式的請求結果(無論json格式多復雜,都能搞定);
- 支持傳入JavaBean對象(解析之后的javabean對象);
- 支持回調方法中反應傳入javabean對象,這樣可以在回調方法中直接拿到解析過后的javabean對象;
- 支持回調方法中更新UI(所以叫異步請求了)。
說明:java中一切皆對象,這里的JavaBean對象就是你請求接口之后返回的json數據所對應的實體,使用時返回的json數據可根據你給的對象自動解析並返回對象。
3.使用
gradle添加依賴(添加完之后Sync一下):
compile 'com.huangdali:myhttputils:2.0.2'
get:
public void onGet() { String url = "http://gpj.zhangwoo.cn/app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments"; new MyHttpUtils() .url(url)//請求的url .setJavaBean(UserBean.class)//設置需要解析成的javabean對象 .setReadTimeout(60000)//設置讀取超時時間,不設置的話默認為30s(30000) .setConnTimeout(6000)//設置連接超時時間,不設置的話默認5s(5000) .onExecute(new CommCallback<UserBean>() {//開始執行異步請求,傳入一個通用回調對象,泛型為返回的javabean對象 @Override public void onSucess(UserBean bean) {//成功之后回調 Util.showMsg(MainActivity.this, bean.getData().get(0).getDepartname()); } @Override public void onFailed(String msg) {//失敗時候回調 Util.showMsg(MainActivity.this, msg); } }); }
Post:
public void onPost() { HashMap<String, String> param = new HashMap<>(); param.put("c", "member"); param.put("a", "getdepartments"); new MyHttpUtils() .url(urls2) .addParam(param) .setJavaBean(UserBean.class) .onExecuteByPost(new CommCallback<UserBean>() {///實體類自動解析 @Override public void onSucess(UserBean remarkBean) { Log.i("tag",remarkBean.toString()); Util.showMsg(MainActivity.this, remarkBean.getData().get(0).getDepartname()); } @Override public void onFailed(String msg) { Util.showMsg(MainActivity.this, msg); } }); }
文件下載:
public void onDownload() { String url = "http://avatar.csdn.net/8/6/0/2_dickyqie.jpg"; new MyHttpUtils() .url(url) .setFileSavePath("/sdcard/downloadtest")//不要這里只是填寫文件保存的路徑,不包括文件名哦 .setReadTimeout(5 * 60 * 1000)//由於下載文件耗時比較大,所以設置讀取時間為5分鍾 .downloadFile(new CommCallback<String>() { @Override public void onSucess(String msg) { Util.showMsg(MainActivity.this, msg); } @Override public void onFailed(String s) { } /** * 可以重寫進度回調方法 * @param total * @param current */ @Override public void onDownloading(long total, long current) { tvProgress.setText("當前進度:" + new DecimalFormat("######0.00").format(((double) current / total) * 100) + "%"); } }); }
別忘加網絡權限
<uses-permission android:name="android.permission.INTERNET" />
文件上傳和下載也需要添加權限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />