问题标签 [okhttp3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1033 浏览

android - 在主线程上设置 Okhttp3 上的缓存

Okhttp3 使用构建器创建 OkHttpClient,请参见下面的示例代码。

我正在使用 Dagger 2 注入 OKHttpClient 并将代码注入主线程。一旦我打开了 stricMode,我们得到了以下信息:

有没有办法使用 Dagger 2 从主线程中设置缓存?

供你参考。我检查了杰克的U2020 项目,它没有问题。有什么我错过的吗。

0 投票
1 回答
10190 浏览

android - 我们可以将什么作为音频文件的 okhttp3 MediaType.parse 方法的参数?

我发现对于使用带有 RequestBody 的 Android 上传图像,我们可以使用 MediaType.parse("image/jpeg")。

但是,音频文件的参数是什么?

预先感谢您的回答。

0 投票
1 回答
1274 浏览

android - 带有改造的 Android 登录身份验证

我有一个 LoginActivity,它获取用户名和密码。我正在尝试使用 POST Retrofit 2 和 OkHTTP 接收身份验证令牌。我创建了构建改造适配器的服务,以及 OkHttp 客户端。我有一个界面,但这是我的问题开始的地方。

我必须在 FormEncodedURL 中将我的凭据(登录时的用户名和密码)发布到后端以接收令牌,我有一个称为 AccessToken 的 POJO。我真的不确定我是否使用回调方法等正确执行此操作。

URL 需要类似于 http://xxxxxxxxxxxxxxxxxx/token/username=smcnary%40metrostudy.com&password=xxxxxx&grant_type=password

请让我知道是否还有其他需要帮助我完成这篇文章,因为我对 android 开发和堆叠还比较陌生。

我的 POST 调用如下所示:

用户模型在哪里:

AccessToken 模型是:

这是 LoginActivity 中的逻辑

0 投票
1 回答
277 浏览

android - 两个带有两个缓存的 OkHttpClients - 奇怪的行为

我的应用目前有一个OkHttpClient(v3.2.0)用于:

  1. 改造
  2. 毕加索
  3. 将图像/视频上传到云媒体服务
  4. 一个HttpDataSource视频使用ExoPlayer这里是实现)

我想将OkHttpClients改造和媒体用例分开使用,因为:

  1. 我想将他们的缓存分开
  2. 媒体OkHttpClient将有一些Interceptors改造者不应该有的细节

进行更改后,我为每个实例OkHttpClient提供了自己的Cache; 两者都在应用程序的缓存目录中,一个使用 directory http,一个使用media. 两个实例的设置方式相同(使用相同的CookieJar, 和Interceptors在它们中Builders;唯一的区别是Cache传递给它们的实例不同)。缓存与 Picasso 完美配合,但与OkHttpDataSource.

传递到的 URL 是OkHttpDataSource我的应用程序服务器上的一个端点,它重定向 (302) 到云媒体服务。这与我们用于图像/毕加索的过程相同,并且效果很好。

我缓存的基本测试步骤是:

  1. 使用OkHttpDataSource播放视频(我的应用程序服务器发回正确的缓存标头)
  2. FC应用程序并重新打开它
  3. 将设备置于飞行模式
  4. 使用OkHttpDataSource播放视频(即使没有互联网连接也应该播放)

当我使用一个时,OkHttpClient一切正常。当我如上所述使用两个实例时,来自我的应用程序服务器的响应被缓存(302),但是当它尝试解析Location标头时,IOException抛出一个说它无法解析地址。同样,当我只使用一个OkHttpClient. 此外,当我有 2 个实例时,如果我使用 Retrofit 实例OkHttpDataSource,缓存工作正常。

我试图通过调试弄清楚发生了什么DiskLruCache,但遇到了困难,因为附加调试器似乎有副作用。我能够观察到的是,在某些情况下,重定向 URL 的缓存条目被删除,因为它DiskLruCache.Entry.readable始终设置为false. 据我所知,这是因为DiskLruCache.completeEdit被调用了success = false,但我不确定为什么会这样。同样,仅使用 的一个实例OkHttpClient或使用 REST 实例而不是媒体实例时,这不是问题OkHttpDataSource

0 投票
2 回答
498 浏览

android - Android Volley 无法为使用 OkHttp3 作为其传输的特定请求禁用缓存

我尝试了一些方法来禁用特定凌空请求的缓存,但该应用程序始终使用缓存的数据。我header("Cache-Control: no-store,no-cache, must-revalidate");的提要标题中有。我从 Android Studio 启动了多个测试,并且源的时间戳在 Logcat 中仍然相同。

我已经在发出请求之前添加stringRequest.setShouldCache(false);并清除了缓存 queue.getCache().clear();,但它不起作用。

活动类:

CustomVolleyRequestQueue 类:

我还尝试okHttpRequestBuilder.cacheControl(CacheControl.FORCE_NETWORK);在 OKHTTP 堆栈类中查看它是否相关OkHttp3但没有任何区别:

0 投票
1 回答
1858 浏览

retrofit - OkHttpClient.Builder拦截器被添加到改造2,即使条件为假

我有一个改造适配器,其中只有当 acesstoken 不为空时,我才将一个 accestoken 拦截器附加到每个请求,但每个请求都附加了拦截器。

我的要求如下,

我的改造适配器代码如下,

}

0 投票
1 回答
675 浏览

java - URL 路径参数编码

我正在努力使用改造的路径参数编码:

  • http://localhost:8080/nuxeo/api/v1是我的基本网址。
  • 我有这个电话@GET("path/{documentPath}") Call<Document> fetchDocumentByPath(@Path("documentPath") String docPath);

  • 作为参数,我正在设置以下内容:default-domain/blabla

  • 我对我的 tomcat 应用程序运行查询,我得到了这个答案

Response{protocol=http/1.1, code=400, message=Bad Request, url=http://localhost:8080/nuxeo/api/v1/path/default-domain%2Fblabla}

  • 即使我把 encode = true 说“不要编码我的参数,它已经编码了”,它仍然在编码它。

  • 此外,在改造中,如果我们提出以下断言,则此测试retrofit2.RequestBuilderTest#getWithEncodedPathParam不起作用:Request request = buildRequest(Example.class, "po/ng");assertThat(request.url().toString()).isEqualTo("http://example.com/foo/bar/po/ng/");

Tomcat 出于安全原因限制了他的 URL 验证:http ://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-0450 。

所以我想直接在我的路径参数中发送“/”而不用 %2F 编码。我怎样才能实现它?

谢谢!

0 投票
1 回答
2352 浏览

android - 将多个值传递给单个参数改造2

我正在尝试将多个值传递给单个参数,例如:

http://api.giphy.com/v1/gifs?api_key=dc6zaTOxFJmzC&ids=feqkVgjJpYtjy,7rzbxdu0ZEXLy

我尝试了以下方法:

在我的活动中:

但是构建的 URL 的形式是:

http://api.giphy.com/v1/gifsids=feqkVgjJpYtjy&ids=7rzbxdu0ZEXLy&api_key=API_KEY_BLANK

我查找了类似的问题,但没有找到正确的答案。

编辑:根据 TooManyEduardos 所说,我将界面更改为

我现在的活动是:

但构建的 URL 仍然是:03-30 02:46:23.922: E/FavActivity(21607): Url : api.giphy.com/v1/gifs?ids=7rzbxdu0ZEXLy&api_key=KEY_HERE

0 投票
2 回答
242 浏览

retrofit2 - retrofit2.0.0+okhttp3 下载日志输出OOM

在此处输入图像描述

在此处输入图像描述

addInterceptor ->HttpLoggingInterceptor bug-->OOM

0 投票
1 回答
6121 浏览

android - 使用 OkHttp3 发送 MultipartBody

我正在编写一个需要与服务器通信的 android 应用程序。我正在努力制作一个供 OkHttp3 使用的 MultipartBody。我的代码如下所示:

这几乎是每个人都使用的标准代码。服务器收到请求,但我无法从请求中获取 MultipartBody。打印多部分正文时,它看起来像这样:

所以我的问题是:为什么它不包含我的数据并且应该包含它?我是否缺少一个库(我在 gradle 中包含了 compile 'com.squareup.okhttp3:okhttp:3.2.0' 并假设 MultipartBody 是该库的一部分)?MultipartBody 应该是什么样子?

我也尝试发送 FormBody,但看起来一样。