Android http 的使用
生活随笔
收集整理的這篇文章主要介紹了
Android http 的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、okHttp
? ? ? ?https://github.com/square/okhttp
?
2、okhttp-utils
? ? ??https://github.com/hongyangAndroid/okhttp-utils
?
3、NoHttp
? ? ? https://github.com/yanzhenjie/NoHttp
?
4、okhttp-OkGo
? ? ?https://github.com/jeasonlzy/okhttp-OkGo
?
5、最原生的http
package www.yiba.com.wifisdk.http;import android.os.Build;import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection;import javax.net.ssl.HttpsURLConnection;public class HttpUtil {private static final int TIMEOUT_IN_MILLIONS = 25000;/*** Get請求,獲得返回數據* @param urlStr* @return* @throws Exception*/public static String doGet(String urlStr , Callback callback) {URL url = null;URLConnection conn = null;InputStream is = null;ByteArrayOutputStream baos = null;try {url = new URL(urlStr);int responseCode = -1;if (urlStr.toLowerCase().startsWith("https")) {conn = url.openConnection();((HttpsURLConnection) conn).setRequestMethod("GET");conn.setReadTimeout(TIMEOUT_IN_MILLIONS);conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");if (Build.VERSION.SDK != null&& Build.VERSION.SDK_INT > 13) {//http://www.tuicool.com/articles/7FrMVfconn.setRequestProperty("Connection", "close");}responseCode = ((HttpsURLConnection) conn).getResponseCode();} else {conn = url.openConnection();((HttpURLConnection) conn).setRequestMethod("GET");conn.setReadTimeout(TIMEOUT_IN_MILLIONS);conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");if (Build.VERSION.SDK != null&& Build.VERSION.SDK_INT > 13) {//http://www.tuicool.com/articles/7FrMVfconn.setRequestProperty("Connection", "close");}responseCode = ((HttpURLConnection) conn).getResponseCode();}if (responseCode == 200) {is = conn.getInputStream();baos = new ByteArrayOutputStream();int len = -1;byte[] buf = new byte[128];while ((len = is.read(buf)) != -1) {baos.write(buf, 0, len);}baos.flush();if ( callback != null ){callback.ok( baos.toString() );}return baos.toString();} else {if ( callback != null ){callback.fail();}throw new RuntimeException(" responseCode is not 200 ... ");}} catch (Exception e) {if ( callback != null ){callback.timeOut();}e.printStackTrace();} finally {try {if (is != null)is.close();} catch (IOException e) {}try {if (baos != null)baos.close();} catch (IOException e) {}if (conn != null) {if (urlStr.toLowerCase().startsWith("https")) {((HttpsURLConnection) conn).disconnect();} else {((HttpURLConnection) conn).disconnect();}}}return null;}public static String doPost(String url, String param , Callback callback ) {PrintWriter out = null;BufferedReader in = null;String result = "";URLConnection conn = null;try {URL realUrl = new URL(url);//打開和URL之間的連接conn = realUrl.openConnection();//設置通用的請求屬性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");if (url.toLowerCase().startsWith("https")) {((HttpsURLConnection) conn).setRequestMethod("POST");} else {((HttpURLConnection) conn).setRequestMethod("POST");}conn.setRequestProperty("charset", "utf-8");conn.setUseCaches(false);//發送POST請求必須設置如下兩行conn.setDoOutput(true);conn.setDoInput(true);conn.setReadTimeout(TIMEOUT_IN_MILLIONS);conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);if (param != null && !param.trim().equals("")) {// 獲取URLConnection對象對應的輸出流out = new PrintWriter(conn.getOutputStream());// 發送請求參數out.print(param);// flush輸出流的緩沖out.flush();}int responseCode = ((HttpURLConnection) conn).getResponseCode();if ( responseCode == 200 ){// 定義BufferedReader輸入流來讀取URL的響應in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}if ( callback != null ){callback.ok( result );}}else {if ( callback != null ){callback.fail();}}} catch (Exception e) {if ( callback != null ){callback.timeOut();}e.printStackTrace();}finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}if (conn != null) {if (url.toLowerCase().startsWith("https")) {((HttpsURLConnection) conn).disconnect();} else {((HttpURLConnection) conn).disconnect();}}}return result;}public interface Callback{void ok( String result ) ;void fail();void timeOut() ;}}?
6、對原生http的簡易封裝
? ? ? 6.1?HttpCall http 請求結果的實體類
? ? ??
package www.yiba.com.analytics.http;/*** Created by ${zyj} on 2016/8/18.*/ public class HttpCall {private ResponseType httpQuestType ;private String result ;public ResponseType getHttpQuestType() {return httpQuestType;}public void setHttpQuestType(ResponseType httpQuestType) {this.httpQuestType = httpQuestType;}public String getResult() {return result;}public void setResult(String result) {this.result = result;} }
? ? ? 6.2?ResponseType?http 請求結果的類型
package www.yiba.com.analytics.http;/*** Created by ${zyj} on 2016/8/18.*/ public enum ResponseType {OK("請求成功") , FAIL("請求失敗") , TIMEOUT("請求超時") ;private String name ;private ResponseType(String name ){this.name = name ;}public String getName() {return name;} }
? ? ? 6.3?HttpUtil 包含 get 和 post請求
package www.yiba.com.analytics.http;import android.os.Build;import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection;import javax.net.ssl.HttpsURLConnection;public class HttpUtil {private static final int TIMEOUT_IN_MILLIONS = 25000;/*** Get請求,獲得返回數據* @param urlStr* @return* @throws Exception*/public static HttpCall doGet(String urlStr , Callback callback) {URL url = null;URLConnection conn = null;InputStream is = null;ByteArrayOutputStream baos = null;HttpCall httpCall = new HttpCall() ;try {url = new URL(urlStr);int responseCode = -1;if (urlStr.toLowerCase().startsWith("https")) {conn = url.openConnection();((HttpsURLConnection) conn).setRequestMethod("GET");conn.setReadTimeout(TIMEOUT_IN_MILLIONS);conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");if (Build.VERSION.SDK != null&& Build.VERSION.SDK_INT > 13) {//http://www.tuicool.com/articles/7FrMVfconn.setRequestProperty("Connection", "close");}responseCode = ((HttpsURLConnection) conn).getResponseCode();} else {conn = url.openConnection();((HttpURLConnection) conn).setRequestMethod("GET");conn.setReadTimeout(TIMEOUT_IN_MILLIONS);conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");if (Build.VERSION.SDK != null&& Build.VERSION.SDK_INT > 13) {//http://www.tuicool.com/articles/7FrMVfconn.setRequestProperty("Connection", "close");}responseCode = ((HttpURLConnection) conn).getResponseCode();}if (responseCode == 200) {is = conn.getInputStream();baos = new ByteArrayOutputStream();int len = -1;byte[] buf = new byte[128];while ((len = is.read(buf)) != -1) {baos.write(buf, 0, len);}baos.flush();if ( callback != null ){callback.ok( baos.toString() );}if ( httpCall != null ){httpCall.setHttpQuestType( ResponseType.OK );httpCall.setResult( baos.toString() );}} else {if ( callback != null ){callback.fail();}if ( httpCall != null ){httpCall.setHttpQuestType( ResponseType.FAIL );httpCall.setResult( "" );}}} catch (Exception e) {if ( callback != null ){callback.timeOut();}if ( httpCall != null ){httpCall.setHttpQuestType( ResponseType.TIMEOUT );httpCall.setResult( "" );}e.printStackTrace();} finally {try {if (is != null)is.close();} catch (IOException e) {}try {if (baos != null)baos.close();} catch (IOException e) {}if (conn != null) {if (urlStr.toLowerCase().startsWith("https")) {((HttpsURLConnection) conn).disconnect();} else {((HttpURLConnection) conn).disconnect();}}return httpCall ;}}public static HttpCall doPost(String url, String param , Callback callback ) {PrintWriter out = null;BufferedReader in = null;String result = "";URLConnection conn = null;HttpCall httpCall = new HttpCall() ;try {URL realUrl = new URL(url);//打開和URL之間的連接conn = realUrl.openConnection();//設置通用的請求屬性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("Content-Type","application/json");if (url.toLowerCase().startsWith("https")) {((HttpsURLConnection) conn).setRequestMethod("POST");} else {((HttpURLConnection) conn).setRequestMethod("POST");}conn.setRequestProperty("charset", "utf-8");conn.setUseCaches(false);//發送POST請求必須設置如下兩行conn.setDoOutput(true);conn.setDoInput(true);conn.setReadTimeout(TIMEOUT_IN_MILLIONS);conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);if (param != null && !param.trim().equals("")) {// 獲取URLConnection對象對應的輸出流out = new PrintWriter(conn.getOutputStream());// 發送請求參數out.print(param);// flush輸出流的緩沖out.flush();}int responseCode = ((HttpURLConnection) conn).getResponseCode();if ( responseCode == 200 ){// 定義BufferedReader輸入流來讀取URL的響應in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}if ( callback != null ){callback.ok( result );}if ( httpCall != null ){httpCall.setHttpQuestType( ResponseType.OK );httpCall.setResult( result );}}else {if ( callback != null ){callback.fail();}if ( httpCall != null ){httpCall.setHttpQuestType( ResponseType.FAIL );httpCall.setResult( "" );}}} catch (Exception e) {if ( callback != null ){callback.timeOut();}if ( httpCall != null ){httpCall.setHttpQuestType( ResponseType.TIMEOUT );httpCall.setResult( "" );}e.printStackTrace();}finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}if (conn != null) {if (url.toLowerCase().startsWith("https")) {((HttpsURLConnection) conn).disconnect();} else {((HttpURLConnection) conn).disconnect();}}return httpCall ;}}public interface Callback{void ok(String result) ;void fail();void timeOut() ;}}
? ? ? 6.4 如何使用
private void httpGet(){//get 用法1new Thread(new Runnable() {@Overridepublic void run() {HttpUtil.doGet("http://www.baidu.com", new HttpUtil.Callback() {@Overridepublic void ok(String result) {//請求成功}@Overridepublic void fail() {//請求失敗}@Overridepublic void timeOut() {//請求超時}}) ;}}) ;//get 用法2new Thread(new Runnable() {@Overridepublic void run() {HttpCall httpCall = HttpUtil.doGet( "http://www.baidu.com" , null ) ;switch ( httpCall.getHttpQuestType() ){case OK://請求成功break;case FAIL://請求失敗break;case TIMEOUT://請求超時break;}}}) ;}private void httpPost(){//post 用法1new Thread(new Runnable() {@Overridepublic void run() {HttpUtil.doPost("http://www.baidu.com", "post請求參數" , new HttpUtil.Callback() {@Overridepublic void ok(String result) {//請求成功}@Overridepublic void fail() {//請求失敗}@Overridepublic void timeOut() {//請求超時}}) ;}}) ;//post 用法2new Thread(new Runnable() {@Overridepublic void run() {HttpCall httpCall = HttpUtil.doPost( "http://www.baidu.com" , "post請求參數" , null ) ;switch ( httpCall.getHttpQuestType() ){case OK://請求成功break;case FAIL://請求失敗break;case TIMEOUT://請求超時break;}}}) ;}
7、http下載圖片并且壓縮bitmap
//從網絡下載bitmapprivate Bitmap downLoadBitmapFromNet( String urlString ){InputStream inputStream = null ;HttpURLConnection conn = null ;Bitmap bitmap ;try {URL url = new URL( urlString ) ;conn = (HttpURLConnection) url.openConnection();inputStream = new BufferedInputStream( conn.getInputStream() ) ;inputStream.mark( inputStream.available() );//壓縮圖片BitmapFactory.Options options = new BitmapFactory.Options() ;options.inJustDecodeBounds = true ;BitmapFactory.decodeStream( inputStream , null , options ) ;options.inSampleSize = 4 ;options.inPreferredConfig = Bitmap.Config.RGB_565 ;options.inJustDecodeBounds = false ;inputStream.reset();bitmap = BitmapFactory.decodeStream( inputStream , null , options ) ;return bitmap ;} catch (MalformedURLException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}finally {if ( inputStream != null ){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if ( conn != null ){conn.disconnect();}}return null ;}需要注意的事項
1、并不是所有的inputStream都支持mark()方法的, 因為這里的 InputStream其實是?BufferedInputStream 。?BufferedInputStream 繼承 InputStream 并且重寫了里面的?mark() 、reset() 、markSupported()
?
總結
以上是生活随笔為你收集整理的Android http 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android ThreadUtil
- 下一篇: Android 监听锁屏、解锁、开屏 操