1.簡介
Android中網絡請求通常使用Apache HTTP Client或者採用HttpURLConnection,可是直接使用這兩個類庫須要寫大量的代碼才能完成網絡post和get請求,而使用這個MyHttpUtils庫能夠大大的簡化操做,它是基於HttpURLConnection,全部的請求都是獨立在UI主線程以外,沒有經過CommCallback回調方法處理請求結果, 沒有了子線程、沒有了handle,鏈式的變成使得代碼更加清晰 。php
2.特性 java
說明:java中一切皆對象,這裏的JavaBean對象就是你請求接口以後返回的json數據所對應的實體,使用時返回的json數據可根據你給的對象自動解析並返回對象。android
3.使用git
gradle添加依賴(添加完以後Sync一下):github
compile 'com.huangdali:myhttputils:2.0.2'
get:json
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); } }); }
文件下載:app
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" />
文件上傳和下載也須要添加權限ide
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />