Первое решение состоит в том, чтобы использовать параметры URL, как это:
public interface JsonPlaceholderApi{
@GET("{get_url}")
Call<List<Messages>> getPosts(@Path("get_url") String getUrl);
@FormUrlEncoded
@POST("{post_url}")
Call<List<MessageStatus>> PostStatus(@Path("post_url") String postUrl, ....);
}
, и когда вы хотите вызвать ваш API-пароль, который URL, как показано ниже:
api.getPosts(mPreferences.getString("get_url" , ""))
api.PostStatus(mPreferences.getString("post_url" , ""), ...)
Существуеттакже хитрое решение (которое я лично ненавижу), но вы можете установить URL-адреса для некоторых констант и манипулировать ими в своем перехватчике (например, заменяя их), читая их из общих настроек.
Например:
public interface JsonPlaceholderApi{
public static final String GET_POSTS_DUMMY_URL = "GET_POSTS_DUMMY_URL";
public static final String POST_STATUS_DUMMY_URL = "POST_STATUS_DUMMY_URL";
@GET(GET_POSTS_DUMMY_URL)
Call<List<Messages>> getPosts();
@FormUrlEncoded
@POST(POST_STATUS_URL)
Call<List<MessageStatus>> PostStatus(....);
}
А затем в вашей модифицированной функции перехвата Interceptor сделайте что-то вроде этого:
public class RetrofitInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder requestBuilder = request.newBuilder();
// ...
requestBuilder.url(request.url().toString()
.replace(
JsonPlaceholderApi.GET_POSTS_DUMMY_URL,
mPreferences.getString("get_url" , "")
)
.replace(
JsonPlaceholderApi.POST_STATUS_DUMMY_URL,
mPreferences.getString("post_url" , "")
)
);
request = requestBuilder.build();
// ...
return chain.proceed(request);
}
}
И если вы не знаете, как добавить перехватчик для проверки дооснащения этот документ