问题标签 [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.
android - 在主线程上设置 Okhttp3 上的缓存
Okhttp3 使用构建器创建 OkHttpClient,请参见下面的示例代码。
我正在使用 Dagger 2 注入 OKHttpClient 并将代码注入主线程。一旦我打开了 stricMode,我们得到了以下信息:
有没有办法使用 Dagger 2 从主线程中设置缓存?
供你参考。我检查了杰克的U2020 项目,它没有问题。有什么我错过的吗。
android - 我们可以将什么作为音频文件的 okhttp3 MediaType.parse 方法的参数?
我发现对于使用带有 RequestBody 的 Android 上传图像,我们可以使用 MediaType.parse("image/jpeg")。
但是,音频文件的参数是什么?
预先感谢您的回答。
android - 带有改造的 Android 登录身份验证
我有一个 LoginActivity,它获取用户名和密码。我正在尝试使用 POST Retrofit 2 和 OkHTTP 接收身份验证令牌。我创建了构建改造适配器的服务,以及 OkHttp 客户端。我有一个界面,但这是我的问题开始的地方。
我必须在 FormEncodedURL 中将我的凭据(登录时的用户名和密码)发布到后端以接收令牌,我有一个称为 AccessToken 的 POJO。我真的不确定我是否使用回调方法等正确执行此操作。
请让我知道是否还有其他需要帮助我完成这篇文章,因为我对 android 开发和堆叠还比较陌生。
我的 POST 调用如下所示:
用户模型在哪里:
AccessToken 模型是:
这是 LoginActivity 中的逻辑
android - 两个带有两个缓存的 OkHttpClients - 奇怪的行为
我的应用目前有一个OkHttpClient
(v3.2.0)用于:
- 改造
- 毕加索
- 将图像/视频上传到云媒体服务
- 一个
HttpDataSource
视频使用ExoPlayer
(这里是实现)
我想将OkHttpClients
改造和媒体用例分开使用,因为:
- 我想将他们的缓存分开
- 媒体
OkHttpClient
将有一些Interceptors
改造者不应该有的细节
进行更改后,我为每个实例OkHttpClient
提供了自己的Cache
; 两者都在应用程序的缓存目录中,一个使用 directory http
,一个使用media
. 两个实例的设置方式相同(使用相同的CookieJar
, 和Interceptors
在它们中Builders
;唯一的区别是Cache
传递给它们的实例不同)。缓存与 Picasso 完美配合,但与OkHttpDataSource
.
传递到的 URL 是OkHttpDataSource
我的应用程序服务器上的一个端点,它重定向 (302) 到云媒体服务。这与我们用于图像/毕加索的过程相同,并且效果很好。
我缓存的基本测试步骤是:
- 使用
OkHttpDataSource
播放视频(我的应用程序服务器发回正确的缓存标头) - FC应用程序并重新打开它
- 将设备置于飞行模式
- 使用
OkHttpDataSource
播放视频(即使没有互联网连接也应该播放)
当我使用一个时,OkHttpClient
一切正常。当我如上所述使用两个实例时,来自我的应用程序服务器的响应被缓存(302),但是当它尝试解析Location
标头时,IOException
抛出一个说它无法解析地址。同样,当我只使用一个OkHttpClient
. 此外,当我有 2 个实例时,如果我使用 Retrofit 实例OkHttpDataSource
,缓存工作正常。
我试图通过调试弄清楚发生了什么DiskLruCache
,但遇到了困难,因为附加调试器似乎有副作用。我能够观察到的是,在某些情况下,重定向 URL 的缓存条目被删除,因为它DiskLruCache.Entry.readable
始终设置为false
. 据我所知,这是因为DiskLruCache.completeEdit
被调用了success = false
,但我不确定为什么会这样。同样,仅使用 的一个实例OkHttpClient
或使用 REST 实例而不是媒体实例时,这不是问题OkHttpDataSource
。
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
但没有任何区别:
retrofit - OkHttpClient.Builder拦截器被添加到改造2,即使条件为假
我有一个改造适配器,其中只有当 acesstoken 不为空时,我才将一个 accestoken 拦截器附加到每个请求,但每个请求都附加了拦截器。
我的要求如下,
我的改造适配器代码如下,
}
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 编码。我怎样才能实现它?
谢谢!
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
retrofit2 - retrofit2.0.0+okhttp3 下载日志输出OOM
addInterceptor ->HttpLoggingInterceptor bug-->OOM
android - 使用 OkHttp3 发送 MultipartBody
我正在编写一个需要与服务器通信的 android 应用程序。我正在努力制作一个供 OkHttp3 使用的 MultipartBody。我的代码如下所示:
这几乎是每个人都使用的标准代码。服务器收到请求,但我无法从请求中获取 MultipartBody。打印多部分正文时,它看起来像这样:
所以我的问题是:为什么它不包含我的数据并且应该包含它?我是否缺少一个库(我在 gradle 中包含了 compile 'com.squareup.okhttp3:okhttp:3.2.0' 并假设 MultipartBody 是该库的一部分)?MultipartBody 应该是什么样子?
我也尝试发送 FormBody,但看起来一样。