问题标签 [retrofit2]

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 回答
897 浏览

android - com.squareup.okhttp.internal.framed.IncomingStreamHandler 的 ClassNotFoundException

我正在为一个使用反应式编程和改造的类编写单元测试用例。我收到以下异常:

这是我的改造类和经理类。

以下是我的单元测试用例:

最初谷歌搜索表明okio应该包括库。即使在包含 `okio, library. 这是我的 gradle 文件。

编辑1

当我运行以下命令时:

jar -tvf ~/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp/okhttp/2.5.0/4de2b4ed3445c37ec1720a7d214712e845a24636/okhttp-2.5.0.jar

我确实看到了罐子里的课程。

我仍然很困惑为什么即使它在 jar 文件中,单元测试也无法找到这个类。看起来这是 Jar 地狱问题。

EDIT2:这确实是 Jar 地狱问题。如果您注意到上面的 gradle 文件,我使用的是 2.7.1 版本,okhttp但使用的是 2.5.0 版本mockwebser。当我使用2.7.1mockwebserver 版本时,问题已解决。

0 投票
3 回答
15963 浏览

java - 不支持的操作:Android、Retrofit、OkHttp。在 OkHttpClient 中添加拦截器

我正在尝试使用拦截器在 Android 中通过 Retrofit 2.0-beta3 和 OkHttpClient 添加基于令牌的身份验证。但是当我在 OkHttpClient 中添加我的拦截器时,我得到了 UnsupportedOperationException。这是我的代码:在 ApiClient.java

我像这样使用它:

但我得到这个错误:

添加新拦截器时出错,说它不是 modifiableCollection 但拦截器()函数的文档说:/**

我究竟做错了什么?这可能是一个错误吗?

0 投票
0 回答
337 浏览

java - 改造 - MongoDB - 预期 BEGIN_ARRAY 但为 BEGIN_OBJECT

我正在尝试从 mongodb 接收一些数据。这是格式,我收到:

我正在使用改造来获得它。

我的结构如下所示:

当我运行代码时,我得到了异常:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期 BEGIN_ARRAY 但在第 1 行第 2 列路径 $...

我知道我必须更改 PlantDBStructure,但我真的不知道怎么做。请帮忙。非常感谢!

0 投票
3 回答
2505 浏览

php - 使用改造 2.0 上传多个文件

我目前正在开发应用程序的一部分,用户需要从图库中选择一些图像,然后将这些图像上传到服务器。对于上传,我使用的是使用 multipart 的改造 2.0。

按照资源https://futurestud.io/blog/retrofit-2-how-to-upload-files-to-server我只使用一个文件就成功实现了它,但是我希望在一个会话中所有图像用户选择上传到服务器。

环顾四周,我发现在一个多部分请求中附加了“改造”多个图像,它在 @partmap 注释上进行了讨论,这似乎是正确的匹配,但是我无法理解如何迭代我需要上传的图像?

有人可以指出我正确的实施吗?

还检查了: 1. Retrofit(2.0 beta2) 分段文件上传不起作用 2.上传与数组 Retrofit 2.0.0-beta2 同名的多个图像

0 投票
2 回答
3946 浏览

android - 将改造 2 中的常用路径参数替换为 okhttp

我有一些具有相同 baseUrl 的服务 url。对于某些 url,会有一些常用的参数,例如 an apiVersionor locale。但它们不必在每个 url 中,所以我不能将它们添加到 baseUrl。

我不想在改造界面中添加这些参数。在改造 1 中,我做了一个拦截器,用于RequestFacade.addPathParam(..., ...)为每个 url 填充这些公共路径参数。

对于改造 2,我似乎找不到使用 okhttp 执行此操作的正确方法。我现在看到这可能的唯一方法是HttpUrlChain.request().httpUrl();okhttp 中获取Interceptor并自己操作那个,但我不知道这是否是最好的方法。

有没有人遇到过更好的方法来替换 okhttp 中的路径参数Interceptor

在撰写本文时,我使用的是 retrofit:2.0.0-beta2 和 okhttp:2.7.2。

0 投票
1 回答
536 浏览

android - Retrofit2 中每个 api 的拦截器

我有四种不同的 api,每一种都有自己的标头。我尝试使用拦截器机制来填充标头,而不是为每个调用提供相同的标头,但是由于 OkHttp 拦截器为每个请求运行,我无法为每个 api 创建一个拦截器。

我在 Retrofit2 中没有找到任何其他机制可以让我避免为每个请求编写相同的标头。

什么是给一堆电话相同的标题的好方法?

0 投票
1 回答
1348 浏览

android - 在启动画面中使用 Retrofit 调用 API

我对 android 开发很陌生,现在我有一个应用程序,它使用 Retrofit 和 RxJava 从 Rest Api 调用相当大的记录,并在加载初始屏幕期间将其保存到本地数据库。加载和完成启动画面需要超过 5 分钟,这对于用户体验来说非常烦人。有没有人有任何想法在加载启动画面之前的任何时候调用 Rest Api?在主屏幕上需要保存在本地数据库中的一些数据。

0 投票
1 回答
1251 浏览

android - 如何使用 Retrofit 使用查询字符串参数发出请求?

我有一个带有这样 URL 的 api 方法:http ://api.website.com/app.php?action=SOMETHING&id=SOME_NUMBER

我对每个请求唯一更改的部分是 id 查询字符串,替换 SOME_NUMBER(例如:http ://api.website.com/app.php?action=SOMETHING&id=556 )。

我正在创建这样的服务:

我使用工厂类返回服务的实例:

但是,请求似乎忽略了 @Query 参数。这有什么问题?

0 投票
1 回答
14671 浏览

java - How to mock services with Retrofit 2.0 and the new MockRetrofit class?

Using Retrofit 1 we used to mock web services and simulate network latency as following:

Where MyService is the service Interface (returning responses as Rx Observables), and MyServiceMock is a class that implements this interface.

In Retrofit 2.0.0-beta3 there is a brand new mocking system (see: https://github.com/square/retrofit/pull/1343) that is not yet documented. When trying to to something similar I get:

How do I forward calls to MyServiceMock?

0 投票
1 回答
2567 浏览

android - 创建多个具有相同连接池的 OkHttp3 客户端

我正在使用 Retrofit2。我可以创建几个 OkHttp3 客户端并与其他客户端共享第一个实例的连接池吗?它是线程安全和良好的做法吗?