問題タブ [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 の処理
私は、Google Android のユーザー エクスペリエンスに従って、API と対話するための適切な Android アプリケーションを作成中です。
アプリケーションは Retrofit を使用します (REST-api メカニズムを簡単にするため)。
これで、各 API 呼び出しに対応する Java クラスが作成されました。
たとえば、この方法で APISite.java
を処理するクラス:/sites
これは簡潔にするために要約されています。
インターフェイスは、このように接続されています。ISites.java
大きな問題は、一般的なラッパーが使用されているため、どのようにして Retrofit をコレクションに戻すことができるかということです。これは、List<Site>
などの他のオブジェクトにも同様に適用できます。Question
Answer
Chrome で Postman 拡張機能をテストした後、次のことがわかりました。これはつまずきです。使用する REST API に関係なく、一般的なラッパーが応答で返されますがitems
、JSON 出力内のフィールドには次の配列が含まれています。Site
この場合。
私は、返されない共通ラッパーにフィールドがあると推測しましたtype
。ここでのアイデアは、後で少しチートすることです...そして、それはフィルターの一部ではないため、/filter/create
API を作成し、次のように Retrofit の呼び出しへの呼び出しの一部としてそれを適用しますRestAdapter
。
SO でここで回答された Gson のカスタムTypeAdapterFactory
を研究した後、ここで何か不足していますか?これは私がこれまでに持っているものです。
SEWrapper.java
次のようなクラスを作成しました。
SEWrapper
の代わりに使用するように Site.java ソースをSite
変更し、REST 呼び出しを変更しました。
このコードは、StackOverflow に関する質問から採用されています。
このつまずきを回避する方法についてのアイデアがありません。
理論的には、Retrofit のResponse
オブジェクトを返すように書き直して、各 JSON オブジェクトを手動で解析し、その型の List を作成することSite
もできますが、返される API オブジェクトごとに面倒で時間がかかります。
私はこれを間違った方法で行っているのでしょうか、それとも Retrofit ライブラリで期待を少し高く設定しすぎたのでしょうか?
android - レトロフィットのために HTTP レイヤーを偽装するための代替手段
私は過去数日間、いくつかのクラスの逆シリアル化コードが機能しているかどうかを確認するためのテストを書くのに苦労してきました。
Retrofit を介して API と通信する REST サービス クラスの Java パッケージがあります。私のアイデアは、Robolectric FakeHttpLayer を使用して特定の応答を提供し、サービス クラスが JSON 応答から Model オブジェクトを効果的に作成することを確認する一連のテストを作成することでした。
- Robolectric はネットワーク呼び出しを傍受していないようです (つまり、常に API からライブ データを取得しています)。なぜだかわかりません。
- これまでに書いたものをテストする他の方法はありますか? このレイヤーをテストすることは私にとって非常に重要です。これにより、アプリのロジック レイヤーを作成している担当者が信頼できる作業を行えるようになり、その間、私はアプリの他の部分に取り掛かることができます。
ありがとう!
android - 基本 HTTP 認証を使用した Retrofit POST 要求:「ストリーミングされた HTTP 本文を再試行できません」
Retrofit を使用して基本的な POST リクエストを実行し、リクエストに基本的な @Body を提供しています。
Retrofit のインターフェイスを構築するときは、独自のカスタム OkHttpClient を提供しています。それに対して行っているのは、独自のカスタム認証を追加することだけです。
これは、OKHttp を使用して直接リクエストを送信したり、レトロフィットを使用して他の GET リクエストを送信したりする場合にうまく機能しますが、レトロフィットを使用して POST リクエストを実行すると、次のエラーが発生します。
私はそれで遊んだ。認証を削除し、認証を必要としないサーバーを指すと、正常に動作します。
- だから情報を発信しているに違いない。
- 認証チャレンジ リクエストを取得します。
- チャレンジリクエストにお応えします。
- リクエストを再送信しようとすると、エラーがスローされます。
これを回避する方法がわかりません。どんな助けでも素晴らしいでしょう。
android - Retrofit リクエストの本文で生の JSON 全体を POST する方法は?
この質問は以前に尋ねられた可能性がありますが、決定的な回答はありませんでした。Retrofit リクエストの本文内に生の JSON 全体をどのように正確に投稿しますか?
ここで同様の質問を参照してください。または、フォーム URL をエンコードしてフィールドとして渡す必要があるというこの回答は正しいですか? 私が接続しているサービスは、投稿の本文で生の JSON を期待しているだけなので、そうしないことを本当に願っています。JSON データの特定のフィールドを探すようには設定されていません。
これを残りの部分で明確にしたいだけです。1 名がレトロフィットを使用しないと回答した。もう 1 つは、構文について確信が持てませんでした。別の人は、それは可能だと考えていますが、フォームが URL エンコードされてフィールドに配置されている場合に限ります (私の場合は受け入れられません)。いいえ、Android クライアント用にすべてのサービスを再コーディングすることはできません。はい、主要なプロジェクトでは、JSON コンテンツをフィールド プロパティ値として渡す代わりに、未加工の JSON を投稿するのが非常に一般的です。それを正しく理解して先に進みましょう。これがどのように行われるかを示すドキュメントまたは例を誰かが指摘できますか? または、それを行うことができる/行うべきではない正当な理由を提供してください。
更新: 100% 確実に言えることが 1 つあります。Google の Volley でこれを行うことができます。内蔵されています。Retrofit でこれを行うことはできますか?
android - レトロフィット ボディが Null の場合がある
LAN で作業している場合にのみ発生している可能性がありますが、応答で null ボディが返されることがあります。ブラウザーまたは REST クライアントで同じ要求をチェックすると、本文が表示され、Content-Length はゼロではありません (実際には 12,504 であり、ゼロよりも十分に大きい) アイデアはありますか?
android - ListFragment 内で setListAdapter を呼び出した後、ListView が空になるのはなぜですか?
Retrofitを使用して Web サービスからのデータを ListView に入力しようとしていますが、私の ListView はどういうわけか常に空です。Web サービスからデータを正常に取得していますが、ListView に取り込まれていません。setListAdapter() を呼び出した後、リストビューのカウントが 0 であるため、何もしていないようです。ListView が空なのはなぜですか? これが私のコードの一部です:
2 つのログ メソッド 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
または他の手段を使用してですか?
android - Retrofit+Okhttp は Android のデフォルトとして httpCaching を使用していますか?
アプリケーションの 1 つでレトロフィットとokhttpを使用しています。
Retrofit のデフォルトの動作について、適切な説明を見つけることができません。
Okhttp がクラス パス上にある場合は、自動的に使用されます。しかし、私が見る限り、デフォルトの HttpResponseCache は null です。
Retrofit と Okhttp でキャッシュを明示的に有効にする必要がありますか?