基于HttpURLConnection的android http請求封裝
使用方法
new Thread(new Runnable(){
@Override
public void run() {
//axiosGH(url,callback)//簡寫方式,默認為get請求
//axiosGH.get(url,callback)
//axiosGH.get(url,params,callback)
//axiosGH.post(url,callback)
//axiosGH.post(url,params,callback)
axiosGH.post(serverUrl + "/user/login", params, new AxiosGH.Callback() {
@Override
public void onSuccess(String res) {
//請求成功返回參數(shù)處理
System.out.println(res);
}
@Override
public void onFailed(String err) {
//請求失敗返回參數(shù)處理
System.out.println(err);
}
});
}
}).start();
代碼片段
package com.guhun.server;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;
// 仿造axios書寫的http請求——————GuHun
public class AxiosGH {
private String requestMethod;
private boolean useCaches;
private String serverUrl;
private int connectTimeout;
private String encode;
// 初始化實例
public AxiosGH(){
init();
}
// 默認為get請求(地址,回調函數(shù))
public AxiosGH(String url,Callback callback){
init();
serverUrl = url;
submitPostData(null,callback);
}
// get請求(地址,參數(shù),回調函數(shù))
public void get(String url,Callback callback){
serverUrl = url;
submitPostData(null,callback);
}
// get請求(地址,參數(shù),回調函數(shù))
public void get(String url,Map<String,String> params,Callback callback){
serverUrl = url;
submitPostData(params,callback);
}
// post請求(地址,回調函數(shù))
public void post(String url,Callback callback){
requestMethod = "POST";
serverUrl = url;
submitPostData(null,callback);
}
// post請求(地址,參數(shù),回調函數(shù))
public void post(String url,Map<String,String> params,Callback callback){
requestMethod = "POST";
serverUrl = url;
submitPostData(params,callback);
}
// 初始化參數(shù)
private void init(){
requestMethod = "GET";
useCaches = false;
connectTimeout = 3000;
encode="utf-8";
}
// 博客園-依舊淡然
//HttpUtils.submitPostData(params, "utf-8")
private void submitPostData(Map<String, String> params,Callback callback){
String data = null;
if (params!=null) {
data = getRequestData(params, encode).toString();
}
try {
if(requestMethod.equals("GET") && data != null){
serverUrl += '?'+data;
}
URL url = new URL(serverUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(requestMethod);//方式
connection.setConnectTimeout(connectTimeout);//超時
if(requestMethod.equals("POST")){
connection.setDoInput(true);//向服務器輸入
connection.setDoOutput(true);//向服務器輸出
connection.setUseCaches(useCaches);//緩存
//設置請求體的類型是文本類型
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//設置請求體的長度
connection.setRequestProperty("Content-Length", String.valueOf(data.getBytes().length));
//獲得輸出流,向服務器寫入數(shù)據(jù)
OutputStream outputStream = connection.getOutputStream();
outputStream.write(data.getBytes());
}
int response = connection.getResponseCode(); //獲得服務器的響應碼
if(response == HttpURLConnection.HTTP_OK) {
InputStream inptStream = connection.getInputStream();
callback.onSuccess(dealResponseResult(inptStream)); //處理服務器的響應結果
}else {
callback.onFailed("Error: response is" + response);
}
} catch (Exception e) {
e.printStackTrace();
callback.onFailed(e.toString());
}
}
// 博客園-依舊淡然
public static StringBuffer getRequestData(Map<String, String> params, String encode) {
StringBuffer stringBuffer = new StringBuffer(); //存儲封裝好的請求體信息
try {
for(Map.Entry<String, String> entry : params.entrySet()) {
stringBuffer.append(entry.getKey())
.append("=")
.append(URLEncoder.encode(entry.getValue(), encode))
.append("&");
}
stringBuffer.deleteCharAt(stringBuffer.length() - 1); //刪除最后的一個"&"
} catch (Exception e) {
e.printStackTrace();
}
return stringBuffer;
}
// 博客園-依舊淡然
public static String dealResponseResult(InputStream inputStream) {
String resultData = null; //存儲處理結果
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int len = 0;
try {
while((len = inputStream.read(data)) != -1) {
byteArrayOutputStream.write(data, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
resultData = new String(byteArrayOutputStream.toByteArray());
return resultData;
}
// 回調函數(shù)
public interface Callback{
void onSuccess(String res);
void onFailed(String err);
}
// 請求方式
public void setRequestMethod(String requestMethod) {
this.requestMethod = requestMethod;
}
// 使用緩存
public void setUseCaches(boolean useCaches) {
this.useCaches = useCaches;
}
// 請求地址
public void setServerUrl(String serverUrl) {
this.serverUrl = serverUrl;
}
// 請求參數(shù)
public void setConnectTimeout(int connectTimeout) {
this.connectTimeout = connectTimeout;
}
// 編碼方式
public void setEncode(String encode) {
this.encode = encode;
}
}
作者:咕魂
時間:2021年3月9日09:47:14
get請求我沒測試,之后用到有問題會更新
參考代碼:Android學習筆記46:使用Post方式提交數(shù)據(jù)
|