Dengan Retrofit 2, Anda dapat mengatur URL lengkap dalam anotasi metode layanan seperti:
public interface APIService {
@GET("http://api.mysite.com/user/list")
Call<Users> getUsers();
}
Namun, di aplikasi saya, URL layanan web saya tidak dikenal pada waktu kompilasi, aplikasi mengambilnya dalam file yang diunduh jadi saya bertanya-tanya bagaimana saya bisa menggunakan Retrofit 2 dengan URL dinamis penuh.
Saya mencoba menetapkan path lengkap seperti:
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();
Tetapi di sini, Retrofit tidak melihat bahwa jalur tersebut sebenarnya adalah URL lengkap dan sedang mencoba untuk mengunduh http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist
Adakah petunjuk tentang bagaimana saya bisa menggunakan Retrofit dengan url dinamis seperti itu?
Terima kasih
Jawaban:
Saya pikir Anda menggunakannya dengan cara yang salah. Berikut adalah kutipan dari changelog :
Jadi antarmuka Anda harus seperti ini:
sumber
Saya ingin mengganti hanya sebagian url, dan dengan solusi ini, saya tidak harus meneruskan keseluruhan url, hanya bagian dinamis:
sumber
Anda dapat menggunakan bendera yang disandikan pada
@Path
anotasi:/
dengan%2F
.?
penggantian%3F
, jadi Anda masih tidak bisa meneruskan string kueri dinamis.sumber
Pada Retrofit 2.0.0-beta2, jika Anda memiliki layanan menanggapi JSON dari URL ini: http: // myhost / mypath
Berikut ini tidak berfungsi:
Tapi ini ok:
sumber
Anda bisa menggunakan ini:
Untuk informasi lebih lanjut, lihat dokumentasi https://square.github.io/retrofit/
sumber
Langkah 1
Langkah-2 Untuk praktik terbaik, tentukan kelas untuk instance retrofit: -
} Langkah-3 tentukan dalam aktivitas Anda: -
sumber
Pustaka RetrofitHelper yang ditulis dalam kotlin, akan memungkinkan Anda melakukan panggilan API, menggunakan beberapa baris kode dan Anda dapat menggunakan URL, Header dan Params yang berbeda , di setiap Panggilan.
Tambahkan beberapa URL di kelas aplikasi Anda seperti ini:
Dan kemudian gunakan URL yang Anda butuhkan dalam panggilan:
Untuk informasi lebih lanjut, lihat dokumentasi
sumber
URL dinamis dengan metode Dapatkan dan Posting di Retrofit (MVVM)
Antarmuka Layanan Retrofit:
Kelas layanan MVVM:
dan kelas Klien Retrofit
misalnya Ini url: https://gethelp.wildapricot.com/en/articles/549-changing-your
baseURL: https://gethelp.wildapricot.com
Sisa @Url: / id / artikel / 549-mengubah-Anda (yang Anda lewati kelas layanan retro)
sumber
sumber
Jika Anda sudah memiliki pengaturan kode dan Anda tidak ingin membuat perubahan pada berbagai antarmuka yang Anda bisa, gunakan solusi yang dijelaskan dalam tautan ini . Poin utama adalah metode
changeApiBaseUrl
yang memperbarui URL dan membuat ulang Retrofit builder.Anda dapat menggunakannya sebagai berikut:
sumber