前言:
最近在做安卓新項(xiàng)目 但是要用到老技術(shù) 有點(diǎn)尷尬哈 因?yàn)橹笆謱?xiě)的網(wǎng)絡(luò)框架都是開(kāi)一個(gè)線程然后用handler來(lái)實(shí)現(xiàn)線程之前的通信 現(xiàn)在我改了用 AsyncTask 來(lái)實(shí)現(xiàn):
效果圖
具體實(shí)現(xiàn):
-
網(wǎng)絡(luò)連接
package com.example.myapplication.http;
import android.text.TextUtils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
/**
* Created by xuqing on Date: 2022/11/2
*/
public class NetWorkRequest {
private int dkpdpConnectTime =10000;
private int dkpdpReadTime =10000;
/**
* ch
* @param requestUrl
* @param requestMethod
*/
public NetResponse qecrnNetWordRequst(String requestUrl, String requestMethod, String contextType, String body, Map<String, String> headerMap){
HttpURLConnection connection = null;
try {
URL url = new URL(requestUrl);
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(dkpdpConnectTime);
connection.setReadTimeout(dkpdpReadTime);
connection.setRequestMethod(requestMethod);
connection.setDoInput(true);//可讀入
connection.setDoOutput(true);//可寫(xiě)出
connection.setUseCaches(false);//不緩存
if(!TextUtils.isEmpty(contextType)){
connection.setRequestProperty("Content-Type", contextType);
}
if(headerMap!=null && headerMap.size()>0){
for (String key:headerMap.keySet()){
connection.setRequestProperty(key,headerMap.get(key));
}
}
connection.connect();//建立連接
if(!TextUtils.isEmpty(body)){
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(),"UTF-8"));
if(writer!=null){
writer.write(body);
writer.close();
}
}
return qecrnGetNetResponse(connection);
} catch (Throwable e) {
e.printStackTrace();
return qecrnExceptionResponse(connection,e);
}
}
/**
* 正常返回驰唬,獲取response 對(duì)象
* @param conn
* @return
*/
private NetResponse qecrnGetNetResponse(HttpURLConnection conn){
NetResponse response = new NetResponse();
try {
if(conn == null){
return null;
}
response.dkpdpResponseCode = conn.getResponseCode();
if(response.dkpdpResponseCode == HttpURLConnection.HTTP_OK){
response.dkpdpResponseContent = qecrnGetResponeString(conn.getInputStream());
response.dkpdpResponseCode = 200;//強(qiáng)制修改為200蜘欲,判斷200為成功接收就好了。
}else{
response.dkpdpResponseContent = qecrnGetResponeString(conn.getErrorStream());
}
} catch (Throwable e) {
response.dkpdpResponseCode = -1;
response.dkpdpResponseContent = e.getMessage();
e.printStackTrace();
}
return response;
}
/**
* 異常返回,獲取response 對(duì)象
* @param conn
* @param e
* @return
*/
private NetResponse qecrnExceptionResponse(HttpURLConnection conn, Throwable e){
if(conn != null){
conn.disconnect();
}
if(e == null){
return null;
}
e.printStackTrace();
NetResponse response = new NetResponse();
response.dkpdpResponseCode = -2;
response.dkpdpResponseContent = e.getMessage();
return response;
}
private String qecrnGetResponeString(InputStream is){
String buf;
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"));
StringBuilder sb = new StringBuilder();
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
buf = sb.toString();
return buf;
} catch (Throwable e) {
return "";
}
}
}
異步任務(wù) GET
package com.example.myapplication.http;
import android.annotation.SuppressLint;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
* Created by kunge hu on 2016/11/1.
*/
public class GetTask extends AsyncTask<Void, Void, String> {
private static final String TAG = "GetTask";
private HttpRequestCallBack listener;
private String url;
private Map<String, String> getmapparams;
private String type;
/**
*
* @param url
* @param listener
*/
public GetTask( String url,HttpRequestCallBack listener) {
this.listener = listener;
this.url = url;
}
/***
*
* @param url
* @param type
* @param getmapparams
* @param listener
*/
public GetTask(final String url, final String type, final Map<String, String> getmapparams, HttpRequestCallBack listener) {
this.url = url;
this.listener = listener;
this.getmapparams=getmapparams;
this.type=type;
}
@SuppressLint("NewApi")
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... params) {
try {
String geturl="";
if(getmapparams!=null){
geturl= RequestUtil.clwuyGetUrl(url,getmapparams);
}else{
geturl=url;
}
NetWorkRequest request = new NetWorkRequest();
Map<String, String> headerMap=new HashMap<>();
headerMap.put("x-method","get");
headerMap.put("x-request",type);
String contextType="application/json;charset=utf-8";
NetResponse response =request.qecrnNetWordRequst(geturl,"GET",contextType,"",headerMap);
Log.e(TAG, "doInBackground:response "+response.dkpdpResponseContent );
if(response.dkpdpResponseCode==200){
return response.dkpdpResponseContent;
}else{
return null;
}
} catch (Exception e) {
Log.e("kunge.hu", "GetTask Exception:" + e.toString());
}
return null;
}
@SuppressLint("NewApi")
@Override
protected void onPostExecute(String t) {
try {
if(!TextUtils.isEmpty(t)){
JSONObject jsonObject=new JSONObject(t);
listener.clwuyHttpCallBackListener(t);
}else{
Log.e(TAG, "onPostExecute: "+"網(wǎng)絡(luò)服務(wù)器失敗" );
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
異步任務(wù)post
package com.example.myapplication.http;
import android.annotation.SuppressLint;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
* 作者:xuqing
* 時(shí)間:
* 郵箱:1693891473@qq.com
* 說(shuō)明:post請(qǐng)求異步任務(wù)
*/
public class PostTask extends AsyncTask<Void, Void, String> {
private static final String TAG = "GetTask";
private HttpRequestCallBack listener;
private String url;
private Map<String, String> getmapparams;
private String type;
public PostTask(final String url, HttpRequestCallBack listener) {
this.url = url;
this.listener = listener;
}
public PostTask(final String url, final String type, final Map<String, String> getmapparams, HttpRequestCallBack listener) {
this.url = url;
this.listener = listener;
this.getmapparams=getmapparams;
this.type=type;
}
@SuppressLint("NewApi")
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... params) {
try {
String body="";
if(getmapparams!=null){
body= RequestUtil.clwuyGetPostBodyFormParameMap(getmapparams);
}
NetWorkRequest request = new NetWorkRequest();
Map<String, String> headerMap=new HashMap<>();
headerMap.put("x-method","post");
headerMap.put("x-request",type);
String contextType="application/json;charset=utf-8";
NetResponse response =request.qecrnNetWordRequst(url,"POST",contextType,body,headerMap);
Log.e(TAG, "doInBackground:response "+response.dkpdpResponseContent );
if(response.dkpdpResponseCode==200){
return response.dkpdpResponseContent;
}else{
return null;
}
} catch (Exception e) {
Log.e("kunge.hu", "GetTask Exception:" + e.toString());
}
return null;
}
@SuppressLint("NewApi")
@Override
protected void onPostExecute(String t) {
try {
if(!TextUtils.isEmpty(t)){
JSONObject jsonObject=new JSONObject(t);
listener.clwuyHttpCallBackListener(t);
}else{
Log.e(TAG, "onPostExecute: "+"網(wǎng)絡(luò)服務(wù)器失敗" );
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
對(duì)外層調(diào)用方法
package com.example.myapplication.http;
import java.util.Map;
/**
* 作者:xuqing
* 時(shí)間:2023年11月28日10:17:12
* 郵箱:1693891473@qq.com
* 說(shuō)明:對(duì)外層調(diào)用的方法
*/
public class NetCtrl {
public static void get(final String url, HttpRequestCallBack listener) {
new GetTask(url, listener).execute();
}
public static void get(final String url, final String type, final Map<String, String> params, HttpRequestCallBack listener) {
new GetTask( url,type, params, listener).execute();
}
public static void post(final String url, HttpRequestCallBack listener){
new PostTask( url, listener).execute();
}
public static void post(final String url, final String type,
final Map<String, String> params, HttpRequestCallBack listener){
new PostTask( url,type, params, listener).execute();
}
}
在MainActivity測(cè)試請(qǐng)求
-
get
//帶請(qǐng)求參數(shù)
NetCtrl.get(url, "", null, new HttpRequestCallBack() {
@Override
public void clwuyHttpCallBackListener(String result) {
Log.e(TAG, "clwuyHttpCallBackListener: result-- >"+result );
}
@Override
public void clwuyHttpRequestFail(String errorString, int code) {
}
});
//不帶請(qǐng)求參數(shù)
NetCtrl.get(url, new HttpRequestCallBack() {
@Override
public void clwuyHttpCallBackListener(String result) {
Log.e(TAG, "clwuyHttpCallBackListener: result-- >"+result );
}
@Override
public void clwuyHttpRequestFail(String errorString, int code) {
}
});
-
post
NetCtrl.post(url, "", null, new HttpRequestCallBack() {
@Override
public void clwuyHttpCallBackListener(String result) {
Log.e(TAG, "post clwuyHttpCallBackListener: result-- >"+result );
}
@Override
public void clwuyHttpRequestFail(String errorString, int code) {
}
});
NetCtrl.post(url, new HttpRequestCallBack() {
@Override
public void clwuyHttpCallBackListener(String result) {
Log.e(TAG, "clwuyHttpCallBackListener: "+"result -- > " +result );
}
@Override
public void clwuyHttpRequestFail(String errorString, int code) {
}
});