HTTP是現代應用的網絡。這就是我們如何交換數據和媒體。讓你的東西做HTTP有效負載的速度和節省帶寬。
okhttp是HTTP客戶端的有效默認:
- HTTP 2支持允許所有請求相同的主機共享一個插座。
- 連接池減少請求的延遲(如HTTP / 2不可用)。
- 透明的gzip收縮下載大小。
- 響應緩存避免完全重復要求網絡。
okhttp堅守當網絡是麻煩:它會悄悄地從常見的連接問題恢復。如果你的服務有多個IP地址okhttp將備用地址,如果第一次連接失敗。這是IPv4向IPv6必要冗余的數據中心托管服務。okhttp發起新的連接特點現代TLS(SNI,alpn),落回TLS 1如果握手失敗。
使用okhttp是容易的。它的請求/響應的API的設計與流暢的建設者和不變性。它同時支持同步和異步調用阻塞調用回調函數。
okhttp支持Android 2.3及以上。對於java,最低要求是1.7。
最近半年來身邊開發的朋友越來越多的提到OkHttp,上谷歌百度一下,確實OkHttp成了時下最火的HTTP框架。現在把自己整理的官方教程分享給大家,希望給初學者帶來幫助。
主要包含了一些常見的操作:HTTP GET, HTTP POST,POST單個和多個文件上傳),圖片加載等。如圖:
GET請求
public void getHttp() { OkHttpUtils.get().url("http://www.baidu.com").id(100).build() .execute(new MyStringCallback()); }
POST請求
public void postHttp() { OkHttpUtils.post().url(url).addParams("q", "test") .addParams("showapi_appid", "11548") .addParams("showapi_timestamp", "201601012135954") .addParams("showapi_sign", "bb1d15ab7ce646ec87cc89d684ca4bcb") .build()// .execute(new MyStringCallback());
文件上傳
/** * 提交單個文件 */ OkHttpUtils.postFile().url(url).file(file).build() .execute(new MyStringCallback());
/*** * * post表單形式上傳多個文件 * * @param view */ public void postFile() { String path4 = "/storage/emulated/legacy/Tencent/MobileQQ/qbiz/html5/2312/sqimg.qq.com/" + "qq_product_operations/dyzx_folder/images/bg.jpg"; File file4 = new File(path4); Map<String, String> params = new HashMap<String, String>(); params.put("key", "value"); params.put("key", "value"); OkHttpUtils.post().addFile("filedata0", "bg.jpg", file4) .addFile("filedata1", "bg.jpg", file4).url(url).params(params)// .build()// .execute(new MyStringCallback()); }
顯示圖片
public void getImage(View view) { String url = "http://avatar.csdn.net/8/6/0/1_dickyqie.jpg"; OkHttpUtils.get().url(url).tag(this).build().connTimeOut(20000) .readTimeOut(20000).writeTimeOut(20000) .execute(new BitmapCallback() { @Override public void onError(Call call, Exception e, int id) { _mTextView.setText("onError:" + e.getMessage()); } @Override public void onResponse(Bitmap bitmap, int id) { mImageView.setImageBitmap(bitmap); } }); }
Post JSON
/*** * * * 提交一個Gson字符串到服務器端,注意:傳遞JSON的時候,不要通過addHeader去設置contentType, * 而使用.mediaType(MediaType.parse("application/json; charset=utf-8")).。 * * @param view */ public void postString(View view) { OkHttpUtils.postString().url(url) .content(new Gson().toJson(new Bean("zhy", "123"))) .mediaType(MediaType.parse("application/json; charset=utf-8")) .build().execute(new MyStringCallback()); }
AndroidManifest.xml配置
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
Android Studio
compile 'com.zhy:okhttputils:2.6.2'
Eclipse
下載最新jar:okhttputils-2_6_2.jar okhttp.jar okio.jar 注:點擊可下載,
工具類代碼太多未完全給出,直接下載即可調試或使用。