Android okhttp和httpurlconnection之间的区别?

Android okhttp和httpurlconnection之间的区别?,android,httpurlconnection,okhttp,Android,Httpurlconnection,Okhttp,这两个库之间有什么区别 我是如何理解这两个库之间的区别的,因为Volley使用了httpurlconnection并对okhttp进行了改进 但我不明白它们之间的区别以及两种解决方案的利弊。什么时候okhttp更好,什么时候httpurlconnection更好 我想知道,所以我知道什么时候应该使用它们 编辑: 为什么android使用okhttp进行httpurlconnection?在httpurlconnection没有使用okhttp之前,如果我没有错的话,API是不同的,我个人更喜欢o

这两个库之间有什么区别

我是如何理解这两个库之间的区别的,因为Volley使用了httpurlconnection并对okhttp进行了改进

但我不明白它们之间的区别以及两种解决方案的利弊。什么时候okhttp更好,什么时候httpurlconnection更好

我想知道,所以我知道什么时候应该使用它们

编辑:


为什么android使用okhttp进行httpurlconnection?在httpurlconnection没有使用okhttp之前,如果我没有错的话,API是不同的,我个人更喜欢okhttp


请注意,从Android 4.4开始,网络层(以及HttpUrlConnectionAPI)是通过OkHttp实现的。

OkHttp的优点 OkHttp可以很容易地为每个请求定制 — 如超时定制等,用于每个请求。 OkHttp在网络出现问题时保持不变:它将默默地从常见的连接问题中恢复。如果您的服务有多个IP地址,那么如果第一次连接失败,OkHttp将尝试使用备用地址

可以获得任何请求的完整分析。您可以知道发送的字节、接收的字节以及任何请求所花费的时间。这些分析非常重要,这样您就可以找到应用程序的数据使用情况以及每个请求所花费的时间,从而可以识别慢速请求

使用OkHttp很容易。它的请求/响应API是用fluent Builder和不变性设计的。它支持同步阻塞调用和带有回调的异步调用

OkHttp支持Android 2.3及以上版本。对于Java,最低要求为1.7。

HttpURLConnection 优势:

    URI baseUri = new URI("www.exemple.com/search");
URI uri = applyParameters(baseUri, "word","java");
HttpURLConnection connection = 
    (HttpURLConnection) uri.toURL().openConnection();
connection.setDoInput(true);
connection.setDoOutput(false);
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() == 
   HttpURLConnection.HTTP_OK) {
   // ...
}
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("CustomHeader", token);
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://httpbin.org/get").newBuilder();
urlBuilder.addQueryParameter("website", "www.journaldev.com");
urlBuilder.addQueryParameter("tutorials", "android");
String url = urlBuilder.build().toString();

Request request = new Request.Builder()
                     .url(url)
                     .build();
Request request = new Request.Builder()
    .header("Authorization", "replace this text with your token")
    .url("your api url")
    .build();
  • 轻量级API有助于简化管理并减少兼容性问题
  • 自动处理缓存机制,借助 HttpResponseCache
  • 减少了网络使用量和电池消耗
查询参数:

    URI baseUri = new URI("www.exemple.com/search");
URI uri = applyParameters(baseUri, "word","java");
HttpURLConnection connection = 
    (HttpURLConnection) uri.toURL().openConnection();
connection.setDoInput(true);
connection.setDoOutput(false);
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() == 
   HttpURLConnection.HTTP_OK) {
   // ...
}
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("CustomHeader", token);
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://httpbin.org/get").newBuilder();
urlBuilder.addQueryParameter("website", "www.journaldev.com");
urlBuilder.addQueryParameter("tutorials", "android");
String url = urlBuilder.build().toString();

Request request = new Request.Builder()
                     .url(url)
                     .build();
Request request = new Request.Builder()
    .header("Authorization", "replace this text with your token")
    .url("your api url")
    .build();
Android头文件示例:

    URI baseUri = new URI("www.exemple.com/search");
URI uri = applyParameters(baseUri, "word","java");
HttpURLConnection connection = 
    (HttpURLConnection) uri.toURL().openConnection();
connection.setDoInput(true);
connection.setDoOutput(false);
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() == 
   HttpURLConnection.HTTP_OK) {
   // ...
}
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("CustomHeader", token);
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://httpbin.org/get").newBuilder();
urlBuilder.addQueryParameter("website", "www.journaldev.com");
urlBuilder.addQueryParameter("tutorials", "android");
String url = urlBuilder.build().toString();

Request request = new Request.Builder()
                     .url(url)
                     .build();
Request request = new Request.Builder()
    .header("Authorization", "replace this text with your token")
    .url("your api url")
    .build();
OkHttp 优势:

    URI baseUri = new URI("www.exemple.com/search");
URI uri = applyParameters(baseUri, "word","java");
HttpURLConnection connection = 
    (HttpURLConnection) uri.toURL().openConnection();
connection.setDoInput(true);
connection.setDoOutput(false);
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() == 
   HttpURLConnection.HTTP_OK) {
   // ...
}
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("CustomHeader", token);
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://httpbin.org/get").newBuilder();
urlBuilder.addQueryParameter("website", "www.journaldev.com");
urlBuilder.addQueryParameter("tutorials", "android");
String url = urlBuilder.build().toString();

Request request = new Request.Builder()
                     .url(url)
                     .build();
Request request = new Request.Builder()
    .header("Authorization", "replace this text with your token")
    .url("your api url")
    .build();
  • 连接池
  • 梓平
  • 缓存
  • 从网络问题中恢复
  • 重定向
  • 重试
  • 支持同步和异步调用
查询参数:

    URI baseUri = new URI("www.exemple.com/search");
URI uri = applyParameters(baseUri, "word","java");
HttpURLConnection connection = 
    (HttpURLConnection) uri.toURL().openConnection();
connection.setDoInput(true);
connection.setDoOutput(false);
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() == 
   HttpURLConnection.HTTP_OK) {
   // ...
}
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("CustomHeader", token);
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://httpbin.org/get").newBuilder();
urlBuilder.addQueryParameter("website", "www.journaldev.com");
urlBuilder.addQueryParameter("tutorials", "android");
String url = urlBuilder.build().toString();

Request request = new Request.Builder()
                     .url(url)
                     .build();
Request request = new Request.Builder()
    .header("Authorization", "replace this text with your token")
    .url("your api url")
    .build();
Android头文件示例:

    URI baseUri = new URI("www.exemple.com/search");
URI uri = applyParameters(baseUri, "word","java");
HttpURLConnection connection = 
    (HttpURLConnection) uri.toURL().openConnection();
connection.setDoInput(true);
connection.setDoOutput(false);
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() == 
   HttpURLConnection.HTTP_OK) {
   // ...
}
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("CustomHeader", token);
HttpUrl.Builder urlBuilder = HttpUrl.parse("https://httpbin.org/get").newBuilder();
urlBuilder.addQueryParameter("website", "www.journaldev.com");
urlBuilder.addQueryParameter("tutorials", "android");
String url = urlBuilder.build().toString();

Request request = new Request.Builder()
                     .url(url)
                     .build();
Request request = new Request.Builder()
    .header("Authorization", "replace this text with your token")
    .url("your api url")
    .build();

谢谢Marco,但我也想知道它们的区别和用例。。。我不明白他们之间的区别。那么安卓4.4的网络层是OkHttp?那么httpurlconnection呢?httpurlconnection是OkHttp上的一个包装器,符合java httpurlconnection规范。这里解释了项目的历史:这是httpurlconnection无法实现的吗?重定向