[解決済み] Retrofit 2 はベースURLからホスト名の後の文字を削除します。
2022-05-31 14:07:31
質問
Retrofitを使ってRESTfulなAPIにアクセスしています。ベースとなるurlは
これはインターフェースのコードです。
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 null;
}
@Override
protected void onPostExecute(Response<List<Album>> listCall) {
Log.v("Example", listCall.raw().toString());
}
}.execute();
というログが出るのが変です。
V/Example﹕ Response{protocol=http/1.1, code=404, message=Not Found, url= http://api.example.com/album/featured-albums }
どうなってるんだ?
どのように解決するのですか?
Retrofit 2 は、"Retrofit 2 "と同じルールを使用しています。
<a href="">
と同じルールを使います。
先頭の
/
は、Retrofitにそれがホスト上の絶対パスであることを伝えます。これは、私が行ったプレゼンテーションの例です。
不正確なURLに注意してください。
を削除することで、先頭の
/
を削除すると、URL は相対 URL になり、ベース URL の一部であるパス セグメントと結合されます。プレゼンテーションで修正され、最終的な URL は正しいものになりました。
あなたの例では、末尾の
/
を付けていません。おそらく、相対パスがその兄弟としてではなく、その上に解決されるように、追加したいのでしょう。
関連
-
RuntimeException: アクティビティを開始できません ComponentInfo solution
-
Android開発で「Attempt to invoke virtual method 'XXX()' on null object reference」というヌルポインター例外に遭遇する。
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
android studioが "The activity must be exported or contain an intent-filter" と表示され実行される。
-
JVMのエラーに遭遇しました。Java Runtime Environmentによって致命的なエラーが検出されました。
-
ライブラリをモジュールとしてインポートする際にエラーが発生しました。Error:A problem occurred configuring project ':library'.
-
Windowsのadbシェルでデータディレクトリにアクセスするとパーミッションが拒否される
-
Android Studio http://schemas.android.com/apk/res/android 「URIが登録されていません」の解決方法について
-
[解決済み] アプリケーションからAndroidのWebブラウザでURLを開くにはどうすればよいですか?
-
[解決済み】Retrofit 2 - ダイナミックURL
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
AAPT2エラーについて:詳しくはログをご確認ください。
-
aapt2エラー:ログを確認する(具体的な原因の探り方)
-
AndroidエミュレーターのADBサーバーがACKしない問題
-
android:EMSのプロパティ
-
ArrayAdapter は、リソース ID が TextView であることが必要です。
-
アンドロイドスタジオでJunitのエラー問題を解決する
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
指定された子にはすでに親がいます。まず、その子の親に対して removeView() をコールする必要があります。
-
Android ProgressBarのスタイルカラーを変更する
-
android studioが新しいプロジェクトを作成しますが、プロジェクトの同期に成功するまでデザインエディタが使用できません。