问题标签 [retrofit]
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.
java - 使用 Retrofit 处理 StackExchange API
我正在编写一个简洁的 Android 应用程序来与 API 交互,它遵循 Google Android 用户体验。
该应用程序将使用 Retrofit(使 REST-api 机制更容易)。
现在,我创建了对应于每个 API 调用的 Java 类。
例如,以这种方式Site.java
处理/sites
API 的类:
为简洁起见,这是浓缩的:
接口以这种方式连接起来,称为ISites.java
最大的问题是,由于使用了通用包装器,我怎样才能让 Retrofit 无论如何都返回一个List<Site>
集合,这同样适用于其他对象,例如Question
,Answer
等等。
在 Chrome 下使用 Postman 扩展进行测试后,我观察到以下情况,这是一个绊脚石,无论使用哪个 REST-api,都会在响应中返回公共包装器,但是items
JSON 输出中的字段包含数组Site
在这种情况下。
我推断,公共包装器中有一个未返回的字段,称为type
这里的想法是稍后作弊......而且,由于它不是过滤器的一部分,这意味着必须通过创建一个新过滤器/filter/create
API 并将其作为调用的一部分应用于 Retrofit 的RestAdapter
调用,如下所示:
在研究了在 SO 上回答TypeAdapterFactory
的Gson 的习俗之后,我是否在这里遗漏了一些东西,这就是我到目前为止所拥有的。
创建了一个名为的类SEWrapper.java
,如下所示:
更改了 Site.java 源以使用SEWrapper
而不是Site
,并修改了 REST 调用。
这段代码改编自 StackOverflow 上的问题,
我对如何绕过这个绊脚石没有想法。
理论上,我可以重写它以返回一个 Retrofit 的Response
对象并手动解析每个 JSON 对象,同时创建一个该类型的 List ,Site
对于返回的每个 API 对象,它确实感觉很麻烦且冗长。
我这样做是错误的方式还是我对 Retrofit 库的期望有点太高了?
java - 无论如何,RetroFit 中的服务器是否存在循环?
具体来说,如果我有一组服务器都公开相同的 REST api,那么在 RetroFit 中是否有一种方法可以指定该组服务器,或者是实例化多个改造客户端并循环访问它们的唯一选项?
android - 伪造 HTTP 层进行改造的替代方案
在过去的几天里,我一直在努力编写一些测试来检查我的某些类的反序列化代码是否正常工作。
我有一个 REST 服务类的 java 包,它通过 Retrofit 与我们的 API 进行通信。我的想法是使用 Robolectric FakeHttpLayer 来提供某些响应并编写一组测试来检查我的服务类是否有效地从 JSON 响应创建模型对象。
- robolectric 似乎没有拦截网络调用(即我总是从我们的 API 获取实时数据)。我不确定为什么会这样。
- 有没有其他方法来测试我到目前为止所写的内容?对我来说,测试这一层非常重要,所以编写我们应用程序逻辑层的人有一些可靠的东西可以合作,而我则开始处理应用程序的其他部分。
谢谢!
android - 使用基本 HTTP 身份验证改造 POST 请求:“无法重试流式 HTTP 正文”
我正在使用 Retrofit 执行基本的 POST 请求,并为该请求提供基本的 @Body 。
当我为 Retrofit 构建接口时,我提供了我自己的自定义 OkHttpClient,我所做的只是添加我自己的自定义身份验证:
当我直接使用 OKHttp 发送请求以及使用改造的其他 GET 请求时,这非常有效,但是当我使用改造来执行 POST 请求时,我收到以下错误:
我玩过它。如果我删除身份验证,并指向不需要身份验证的服务器,那么它工作正常。
- 所以我必须发送信息。
- 获取身份验证质询请求。
- 响应挑战请求。
- 尝试再次重新发送请求,然后抛出错误。
不知道如何解决这个问题。任何帮助都会很棒。
android - 如何在改造请求的正文中发布原始的整个 JSON?
这个问题以前可能有人问过,但没有得到明确的回答。在改造请求的正文中究竟如何发布原始的整个 JSON?
在这里看到类似的问题。或者这个答案是否正确,它必须是表单 url 编码并作为字段传递?我真的不希望这样,因为我连接的服务只是在帖子正文中期待原始 JSON。它们未设置为查找 JSON 数据的特定字段。
我只想一劳永逸地与其他人澄清这一点。一个人回答不要使用 Retrofit。另一个不确定语法。另一个人认为可以,但前提是它的形式是 url 编码并放在一个字段中(这在我的情况下是不可接受的)。不,我无法为我的 Android 客户端重新编码所有服务。是的,在主要项目中发布原始 JSON 而不是将 JSON 内容作为字段属性值传递是很常见的。让我们做对并继续前进。有人可以指出显示这是如何完成的文档或示例吗?或者提供一个可以/不应该做的正当理由。
更新:我可以 100% 肯定地说一件事。您可以在 Google 的 Volley 中执行此操作。它是内置的。我们可以在 Retrofit 中做到这一点吗?
android - 改造主体有时为空
它可能只在使用 LAN 时发生,但有时我会在响应中得到一个空正文。在浏览器或 REST 客户端中检查相同的请求会显示一个正文,并且 Content-Length 不为零(实际上是 12,504,这远远超过零)有什么想法吗?
android - NativeCrypto.SSL_write() 在 Android 中间歇性挂起
我正在尝试从 Android 应用程序将照片上传到网络服务。我正在使用第三方库 Retrofit 与服务交互。
我使用 TypedByteArray 作为请求的主体,如下所示:
而上传方法界面是这样的:
有时这有效,有时则无效。我无法识别模式。它似乎与我尝试上传的特定图片无关,因为使用同一张图片已经成功并且失败了。当它失败时,我永远不会得到任何响应,因为改造请求线程只是挂在堆栈中:
这让我非常生气。如果有人有任何想法可能是错误的,或者如何解决它,请帮助!
android - 为什么在 ListFragment 中调用 setListAdapter 后我的 ListView 为空?
我正在尝试使用Retrofit使用 Web 服务中的数据填充 ListView ,但我的 ListView 总是为空。我从 Web 服务中获取数据很好,只是没有进入 ListView。setListAdapter() 似乎没有做任何事情,因为我调用它后列表视图的计数为 0。为什么我的 ListView 是空的?这是我的一些代码:
两个日志方法 Log.v("test", Integer.toString(getListAdapter().getCount())); 和 Log.v("test", Integer.toString(getListView().getCount())); 两者都返回 0。
这是我的自定义适配器:
app_list_item.xml:
fragment_browse_apps.xml:
android - 在 Retrofit 中设置自定义 cookie
有没有办法在改造请求上设置自定义 cookie?
通过使用RequestInterceptor
或任何其他方式?