我正在使用改造从服务器获取和发布一些数据。 我需要来自用户的URL,所以我将它们保存在共享的首选项中,我能够从共享的首选项中读取服务文件中的baseurl,但是我可以在接口'JsonPlaceHolderApi'中读取它们,因为它需要上下文并且另一个错误是属性值的值必须恒定。
答案 0 :(得分:1)
第一个解决方案是使用如下网址参数:
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设置为一些常量,并通过从共享首选项中读取它们来在Interceptor中操纵它们(例如替换它们)。
例如:
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(....);
}
然后在您的拦截器的拦截功能中执行以下操作:
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);
}
}
如果您不知道如何添加拦截器来进行改装,请检查this document
答案 1 :(得分:1)
由于baseUrl不会更改,因此您可以将它们静态地保存在单独的常量类中的任何位置,并使用类的名称获取它们,而无需使用SharedPreferences
{% if pageClass != "page-home" %}
{% if bodyClass != "500" %}
{% if bodyClass != "404" %}
{% include '_components/type-bg' with {
content: {
slug: entry.slug|split(' ')|slice(0, 1)|join
},
} only %}
{% endif %}
{% endif %}
{% endif %}
然后,在您需要其中任何一个的界面中,只需放置:
{% if (pageClass != "page-home") or (if bodyClass != "500") or (if bodyClass != "404")%}
{% include '_components/type-bg' with {
content: {
slug: entry.slug|split(' ')|slice(0, 1)|join
},
} only %}
{% endif %}
或
class Consts {
public static final String GET_URL = "put_url_here";
public static final String POST_URL = "put_url_here";
}