タグ付けされた質問 「retrofit」

Retrofitは、Square、Inc.によるAndroidおよびJava用のタイプセーフなRESTクライアントです。

10
Androidネットワークライブラリの比較:OkHTTP、Retrofit、およびVolley [終了]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか? Stack Overflowのトピックとなるように質問を更新します。 3年前休業。 Androidを学び、JSONから画像、オーディオやビデオのストリーミングダウンロードまでさまざまなリクエストを行うAndroidプロジェクトに取り組んでいるiOS開発者からの2部構成の質問: iOSでは、AFNetworkingプロジェクトを多用しています。Androidに相当するライブラリはありますか? 私は上に読んだOkHTTPとレトロフィットスクエア、だけでなく、バレーボール、まだそれらを使用した開発経験を持っていません。私は誰かがそれぞれの最良のユースケースのいくつかの具体的な例を提供できることを望んでいます。私が読んだことから、OkHTTPは3つの中で最も堅牢で、このプロジェクトの要件を処理できるようです(前述)。

21
Retrofit 2を使用したロギング
リクエストで送信されている正確なJSONを取得しようとしています。これが私のコードです: OkHttpClient client = new OkHttpClient(); client.interceptors().add(new Interceptor(){ @Override public com.squareup.okhttp.Response intercept(Chain chain) throws IOException { Request request = chain.request(); Log.e(String.format("\nrequest:\n%s\nheaders:\n%s", request.body().toString(), request.headers())); com.squareup.okhttp.Response response = chain.proceed(request); return response; } }); Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_URL) .addConverterFactory(GsonConverterFactory.create()) .client(client).build(); しかし、私はこれをログで見るだけです: request: com.squareup.okhttp.RequestBody$1@3ff4074d headers: Content-Type: application/vnd.ll.event.list+json どのように私はの除去を考えると、適切なロギングを行うことになっていますsetLog()し、setLogLevel()我々はレトロフィット1で使用するために使用されましたか?

21
改造リクエストの本文に未加工のJSON全体をPOSTする方法は?
この質問は以前に尋ねられた可能性がありますが、明確に回答されていませんでした。Retrofitリクエストの本文内に未加工のJSON全体をどのように正確にポストしますか? ここで同様の質問を参照してください。または、この回答は、URLエンコードされてフィールドとして渡される必要があることは正しいですか?私が接続しているサービスは投稿の本文にそのままのJSONを期待しているだけなので、私は本当に望みません。JSONデータの特定のフィールドを検索するように設定されていません。 私はちょうどでこれを明確にしたいrestpertsきっぱりと。一人はレトロフィットを使用しないと答えました。もう1つは構文が明確ではありませんでした。別の人はそれが可能であると考えていますが、そのフォームがURLエンコードされてフィールドに配置されている場合のみです(私の場合は受け入れられません)。いいえ、Androidクライアントのすべてのサービスを再コーディングすることはできません。そしてはい、JSONコンテンツをフィールドプロパティ値として渡すのではなく、未加工のJSONをポストすることは、主要なプロジェクトでは非常に一般的です。それを正しく理解して次に進みましょう。これがどのように行われるかを示すドキュメントまたは例を誰かが指すことができますか?または、それができる/すべきではない正当な理由を提供してください。 更新:100%確実に言えることの1つ。Googleのボレーでこれを行うことができます。内蔵されています。これをレトロフィットで実行できますか?

9
RxJava Observableを使用する必要がある場合と、Androidで単純なコールバックを使用する場合
アプリのネットワーキングに取り組んでいます。そこで、私はSquareのレトロフィットを試すことにしました。彼らはシンプルをサポートしていることがわかりますCallback @GET("/user/{id}/photo") void getUserPhoto(@Path("id") int id, Callback<Photo> cb); およびRxJava Observable @GET("/user/{id}/photo") Observable<Photo> getUserPhoto(@Path("id") int id); どちらも一見するとかなり似ていますが、実装すると面白くなります... 単純なコールバックの実装では、次のようになります。 api.getUserPhoto(photoId, new Callback<Photo>() { @Override public void onSuccess() { } }); これは非常にシンプルで簡単です。そして、Observableそれはすぐに冗長で非常に複雑になります。 public Observable<Photo> getUserPhoto(final int photoId) { return Observable.create(new Observable.OnSubscribeFunc<Photo>() { @Override public Subscription onSubscribe(Observer<? super Photo> observer) { try { observer.onNext(api.getUserPhoto(photoId)); …

10
改良2-動的URL
Retrofit 2では、次のようなサービスメソッドのアノテーションに完全なURLを設定できます。 public interface APIService { @GET("http://api.mysite.com/user/list") Call<Users> getUsers(); } ただし、私のアプリでは、コンパイル時にWebサービスのURLがわからないので、アプリはダウンロードしたファイルでそれらを取得するため、完全な動的URLでRetrofit 2をどのように使用できるのか疑問に思っています。 私はフルパスを設定しようとしました: public interface APIService { @GET("{fullUrl}") Call<Users> getUsers(@Path("fullUrl") fullUrl); } new Retrofit.Builder() .baseUrl("http://api.mysite.com/") .build() .create(APIService.class) .getUsers("http://api.mysite.com/user/list"); // this url should be dynamic .execute(); しかし、ここでは、レトロフィットはパスが実際には完全なURLであり、ダウンロードしようとしていることを認識していません。 http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist このような動的URLでRetrofitを使用する方法のヒントはありますか? ありがとうございました
181 android  retrofit 

9
レトロフィットライブラリでタイムアウトを設定するにはどうすればよいですか?
アプリでRetrofitライブラリを使用していますが、タイムアウトを60秒に設定したいと思います。レトロフィットにはこれを行う方法がありますか? 私はこのようにレトロフィットを設定しました: RestAdapter restAdapter = new RestAdapter.Builder() .setServer(BuildConfig.BASE_URL) .setConverter(new GsonConverter(gson)) .build(); タイムアウトを設定するにはどうすればよいですか?

9
すべての呼び出しを変更せずにRetrofitを使用してOAuthトークンを更新する
AndroidアプリでRetrofitを使用して、OAuth2で保護されたサーバーと通信します。すべてが適切に機能します。RequestInterceptorを使用して、各呼び出しにアクセストークンを含めます。ただし、アクセストークンが期限切れになり、トークンを更新する必要がある場合があります。トークンの有効期限が切れると、次の呼び出しは無許可のHTTPコードで返されるため、監視は簡単です。各Retrofit呼び出しを次のように変更できます。失敗コールバックでエラーコードを確認し、Unauthorizedに等しい場合は、OAuthトークンを更新してから、Retrofit呼び出しを繰り返します。ただし、これを行うには、すべての呼び出しを変更する必要があります。これは容易に保守できず、適切な解決策ではありません。すべてのレトロフィット呼び出しを変更せずにこれを行う方法はありますか?

6
OKHttpを使用して改造すると、オフライン時にキャッシュデータを使用できます
Retrofit&OKHttpを使用してHTTP応答をキャッシュしようとしています。私はこの要点をたどり、次のコードで終わりました: File httpCacheDirectory = new File(context.getCacheDir(), "responses"); HttpResponseCache httpResponseCache = null; try { httpResponseCache = new HttpResponseCache(httpCacheDirectory, 10 * 1024 * 1024); } catch (IOException e) { Log.e("Retrofit", "Could not create http cache", e); } OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient.setResponseCache(httpResponseCache); api = new RestAdapter.Builder() .setEndpoint(API_URL) .setLogLevel(RestAdapter.LogLevel.FULL) .setClient(new OkClient(okHttpClient)) .build() …

10
画像を含むRetrofit 2.0を使用したPOSTマルチパートフォームデータ
Retrofit 2.0を使用してサーバーにHTTP POSTを実行しようとしています MediaType MEDIA_TYPE_TEXT = MediaType.parse("text/plain"); MediaType MEDIA_TYPE_IMAGE = MediaType.parse("image/*"); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); imageBitmap.compress(Bitmap.CompressFormat.JPEG,90,byteArrayOutputStream); profilePictureByte = byteArrayOutputStream.toByteArray(); Call<APIResults> call = ServiceAPI.updateProfile( RequestBody.create(MEDIA_TYPE_TEXT, emailString), RequestBody.create(MEDIA_TYPE_IMAGE, profilePictureByte)); call.enqueue(); サーバーは、ファイルが無効であることを示すエラーを返します。 iOSで同じ形式の同じファイルを(他のライブラリを使用して)アップロードしようとしたので、これは奇妙ですが、正常にアップロードされます。 Retrofit 2.0を使用して画像をアップロードする適切な方法は何ですか? アップロードする前に、まずディスクに保存する必要がありますか? PS:画像を含まない他のマルチパートリクエストに改造を使用しましたが、正常に完了しました。問題は、本文にバイトを含めようとするときです。

10
Android Retrofitライブラリでクラスのコンバーターを作成できません
VolleyからRetrofitへの移行中に、JSONObject応答をgsonアノテーションを実装するオブジェクトに変換するために以前使用したgsonクラスをすでに持っています。レトロフィットを使用してhttp getリクエストを作成しようとしているが、アプリがこのエラーでクラッシュした場合 Unable to start activity ComponentInfo{com.lightbulb.pawesome/com.example.sample.retrofit.SampleActivity}: java.lang.IllegalArgumentException: Unable to create converter for class com.lightbulb.pawesome.model.Pet for method GitHubService.getResponse 後付けサイトのガイドに従って、これらの実装を思いつきました。 これは私がレトロなhttpリクエストを実行しようとしている私の活動です: public class SampleActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sample); Retrofit retrofit = new Retrofit.Builder() .baseUrl("**sample base url here**") .build(); GitHubService service = retrofit.create(GitHubService.class); Call<Pet> callPet …
130 android  gson  retrofit 

9
Retrofit-Androidでリクエストとレスポンスの本文を記録する方法は?
完全なリクエスト/レスポンス本文をログに記録するためのRetrofit APIの関連メソッドが見つかりません。プロファイラーでいくつかの助けを期待していました(ただし、応答に関するメタデータしか提供していません)。私はビルダーでログレベルを設定しようとしましたが、これも私には役立ちません: RestAdapter adapter = (new RestAdapter.Builder()). setEndpoint(baseUrl). setRequestInterceptor(interceptor). setProfiler(profiler). setClient(client). setExecutors(MyApplication.getWebServiceThreadPool()). setLogLevel(LogLevel.FULL). setLog(new RestAdapter.Log() { @Override public void log(String msg) { Log.i(TAG, msg); } }). build(); 編集:このコードは現在機能しています。それが以前に機能しなかった理由がわかりません。古いバージョンのレトロフィットを使用していた可能性があります。

21
Retrofit 2.0逆シリアル化されたエラー応答を取得する方法。
Retrofit 2.0.0-beta1を使用しています。 テストでは代替シナリオがあり、エラーHTTP 400が予想されます 欲しいのですretrofit.Response<MyError> response がresponse.body() == null MyErrorはデシリアライズされていません-ここでしか表示されません response.errorBody().string() しかし、それはオブジェクトとしてMyErrorを与えません
128 java  retrofit  retrofit2 

10
Retrofit 2ですべてのリクエストにヘッダーを追加する
Retrofit 2のドキュメントには次のように書かれています: すべてのリクエストに追加する必要があるヘッダーは、OkHttpインターセプターを使用して指定できます。 これは、以前のバージョンを使用して簡単に行うことができ、ここだ、関連するQAは。 しかし、レトロフィット2を使用して、オブジェクトに適用できるようなメソッドsetRequestInterceptorやsetInterceptorメソッドを見つけることができませんでしたRetrofit.Builder。 またRequestInterceptor、OkHttpにはもうないようです。Retrofitのドキュメントでは、Interceptorを紹介していますが、この目的での使用方法がよくわかりませんでした。 これどうやってするの?

4
Retrofit 2で空の応答本文を処理するにはどうすればよいですか?
最近、Retrofit 2の使用を開始し、空の応答本文の解析に関する問題に直面しました。応答本文内にコンテンツがなく、httpコードでのみ応答するサーバーがあります。 サーバーの応答に関するメタ情報(ヘッダー、ステータスコードなど)のみをどのように処理できますか?

1
Retrofit 2はベースURLからホスト名の後の文字を削除します
レトロフィットを使用してRESTful APIにアクセスしています。ベースURLは次のとおりです。 http://api.example.com/service これはインターフェースのコードです: public interface ExampleService { @Headers("Accept: Application/JSON") @POST("/album/featured-albums") Call<List<Album>> listFeaturedAlbums(); } これが私がリクエストを送信してレスポンスを受け取る方法です: new AsyncTask<Void, Void, Response<List<Album>>>() { @Override protected Response<List<Album>> doInBackground(Void... params) { Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://api.example.com/service") .addConverterFactory(GsonConverterFactory.create()) .build(); ExampleService service = retrofit.create(ExampleService.class); try { return service.listFeaturedAlbums().execute(); } catch (IOException e) { e.printStackTrace(); } return …
121 android  retrofit 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.