1、HttpClient时期(2008-2013)

:在Android 2.2之前,HttpClient是Google官方推荐使用的网络请求方式,它是由Apache公司提供的一个高效的、功能丰富的HTTP协议工具包,支持最新的HTTP协议版本和建议。
特点:HttpClient封装了HTTP请求的参数、内容体、响应等,拥有众多API,但API较为复杂。
示例代码:
public class HttpClientExample {
private static final int TIMEOUT_IN_MILLIONS = 5000;
public interface CallBack {
void onRequestComplete(String result);
}
public static void doGetAsyn(final String urlStr, final CallBack callBack) {
new Thread() {
public void run() {
try {
String result = doGet(urlStr);
if (callBack != null) {
callBack.onRequestComplete(result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
public static String doGet(String urlStr) {
URL url = null;
HttpURLConnection conn = null;
InputStream is = null;
ByteArrayOutputStream baos = null;
try {
url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(TIMEOUT_IN_MILLIONS);
conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
is = conn.getInputStream();
String response = getStringFromInputStream(is);
return response;
} else {
throw new NetworkErrorException("response status is " + responseCode);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
}
}
return null;
}
private static String getStringFromInputStream(InputStream is) throws IOException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
is.close();
String state = os.toString(); // 使用UTF-8编码转换流中的数据
os.close();
return state;
}
}
2、HttpURLConnection时期(2013-2016)
:在Android 2.3之后,Google官方推荐使用HttpURLConnection作为网络请求的主要方式,HttpURLConnection是Java标准类库java.net中的一员,但在Android 2.2版本之前,该类还不够完善,存在一些问题。
特点:HttpURLConnection没有封装太多功能,若需要高级功能,如重定向、会话和cookie等,则会显得不太方便。

示例代码:
public class HttpURLConnectionExample {
private static final int TIMEOUT_IN_MILLIONS = 5000;
public interface CallBack {
void onRequestComplete(String result);
}
public static void doGetAsyn(final String urlStr, final CallBack callBack) {
new Thread() {
public void run() {
try {
String result = doGet(urlStr);
if (callBack != null) {
callBack.onRequestComplete(result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
public static String doGet(String urlStr) {
URL url = null;
HttpURLConnection conn = null;
InputStream is = null;
ByteArrayOutputStream baos = null;
try {
url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(TIMEOUT_IN_MILLIONS);
conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
is = conn.getInputStream();
String response = getStringFromInputStream(is);
return response;
} else {
throw new NetworkErrorException("response status is " + responseCode);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
}
}
return null;
}
private static String getStringFromInputStream(InputStream is) throws IOException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
is.close();
String state = os.toString(); // 使用UTF-8编码转换流中的数据
os.close();
return state;
}
}
3、Volley时期(2013年至今)
:2013年Google I/O大会后,Google官方推出了Volley框架,Volley是一个强大的网络请求库,旨在简化网络请求的过程,并提供缓存机制。
特点:Volley提供了简单的API来执行网络请求,并且可以自动处理图片加载和缓存,它的设计使得开发者可以很容易地扩展和自定义。
示例代码:
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;
import android.content.Context;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private RequestQueue mQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mQueue = Volley.newRequestQueue(this);
String url = "http://www.baidu.com";
// 发起一个GET请求
mQueue.add(new Request<String>(Request.Method.GET, url, null, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// 处理响应结果
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 处理错误情况
}
}));
}
}
4、OkHttp时期(2016年至今)

:OkHttp是一个现代的网络请求库,由square公司开发,自从推出以来,OkHttp因其高效、简洁和灵活而受到广泛欢迎。
特点:OkHttp支持同步和异步请求,提供了丰富的API来处理各种HTTP请求和响应,它还支持连接池和GZIP压缩等功能。
示例代码:
import okhttp3.*;
import java.io.IOException;
import okhttp3.logging.HttpLoggingInterceptor;
import okhttp3.internal.hucKing.Interceptor;
import okhttp3.internal.hucKing.InterceptorChain;
import okhttp3.internal.hucKing.Request;
import okhttp3.internal.hucKing.Response;
import okhttp3.internal.hucKing.ResponseBody;
import okhttp3.internal.hucKing.okio.GzipSource;
import okhttp3.internal.hucKing.okio.Okio;
import okhttp3.internal.hucKing.okio.BufferedSource;
import okhttp3.internal.hucKing.okio.ForwardingSource;
import okhttp3.internal.hucKing.okio.Okio;
import okhttp3.internal.hucKing.okio.BufferedSource;
import okhttp3.internal.hucKing.okio.ForwardingSource;
import okhttp3.internal.hucKing.okio.Okio;
import okhttp3.internal.hucKing.okio.BufferedSource;
import okhttp3.internal.hucKing.okio.ForwardingSource;
import okhttp3.internal.hucKing.okio.Okio;
import okhttp3.internal.hucKing.okio.BufferedSource;
import okhttp3.internal.hucKing.okio.ForwardingSource;
import okhttp3.internal.hucKing.okio.Okio;
import okhttp3.internal.hucKing.okio.BufferedSource;
import okhttp3.internal.hucKing.okio.ForwardingSource;
import okhttp3.internal.hucKing.okio.Okio;
import okhttp3.internal.hucKing.okio.BufferedSource;
import okhttp3.internal.hucKing.okio.ForwardingSource;
import okhttp3.internal.hucKing.okio.Okio;
import okhttp3.internal.hucKing.okio.BufferedSource;
import okhttp3.internal.hucKing.okio.ForwardingSource;
import okhttp3.internal.hucKing.okio.Okio;
import okhttp3.internal.hucKing.okio.BufferedSource;
import okhttp3.internal.hucKing.okio.ForwardingSource;
到此,以上就是小编对于“安卓网络请求历史”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。