Android 接口内的共享优先权
我使用改型从服务器获取并发布一些数据。 我需要用户的URL,所以我将它们保存在共享首选项中,我可以从共享首选项中读取服务文件中的baseurl,但我可以在接口“JsonPlaceHolderApi”中读取它们,因为它需要上下文,另一个错误是属性值必须为常量Android 接口内的共享优先权,android,sharedpreferences,retrofit2,Android,Sharedpreferences,Retrofit2,我使用改型从服务器获取并发布一些数据。 我需要用户的URL,所以我将它们保存在共享首选项中,我可以从共享首选项中读取服务文件中的baseurl,但我可以在接口“JsonPlaceHolderApi”中读取它们,因为它需要上下文,另一个错误是属性值必须为常量 第一种解决方案是使用如下url参数: public interface JsonPlaceholderApi{ @GET("{get_url}") Call<List<Messages>> getPo
第一种解决方案是使用如下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, ....);
}
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);
}
}
还有一个棘手的解决方案(我个人不喜欢),但你可以将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(....);
}
如果您不知道如何添加拦截器以进行改装,请检查,因为BaseURL不会更改,您可以将它们静态保存在单独的constants类中的任何位置,并使用类的名称获取它们,而不使用SharedReferences
class Consts {
public static final String GET_URL = "put_url_here";
public static final String POST_URL = "put_url_here";
}
然后,在您需要的界面中,只需放置:
Consts.GET_URL
或
发布代码,而不是将其发布为image.public接口JsonPlaceHolderApi{final SharedReferences mPreferences=PreferenceManager.GetDefaultSharedReferences(JsonPlaceHolderApi.this);SharedReferences.Editor=mPreferences.edit();String get=mPreferences.getString(“get_url”);String post=mPreferences.getString(“post_url”;@GET(GET)Call getPosts();//@Headers({“内容类型:application/json”,“字符集:UTF-8”})@FormUrlEncoded@post(post)Call PostStatus(@Field(“status”)int status,@Field(“id”)int id);}@V-rundPuro-hit你能给我一些建议吗,我被卡住了?你不能把变量传递到注释参数中,它必须是最终的。在你的情况下,试着让String get variable final。不要在注释中发布代码。使用问题中的编辑链接。
Consts.GET_URL
Consts.POST_URL