我需要从Strings.xml文件设置改造基本URL。但是,服务生成器无法访问Android中的Context类。任何人都可以提出任何建议吗?
这是我的代码的快照
private static Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.baseUrl("http://localhost/")
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setLenient
().create()));
答案 0 :(得分:0)
不幸的是,您可以访问任何字符串资源的唯一方法是使用上下文(即Activity
或Service
)。我在这种情况下通常做的就是简单地要求调用者传入上下文。
只能在没有上下文的情况下使用系统资源:
Resources.getSystem().getString(android.R.string.somecommonstuff)
尝试以下解决方案
Application
的子类,例如公共类App extends Application
{<application>
中设置AndroidManifest.xml
标记的android:name属性,指向新的类,例如: android:name=".App"
onCreate()
方法中,将context
(例如this)保存到名为mContext
的静态字段中,并创建一个返回此字段的静态方法,例如getContext():
这应该是它的样子:
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
现在,您可以在需要获取上下文时使用:App.getContext()
,然后getResources()
(or App.getContext().getResources())
。
private static Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.baseUrl(App.getContext().getResources().getString(R.string.YOUR_STRING);)
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setLenient
().create()));
答案 1 :(得分:0)
最好在扩展Application的类中添加Retrofit依赖项。
在这种情况下,您可以通过使用getString()
方法设置基本URL并将url存储在strings.xml文件中来轻松实例化您的改造对象。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(getString(R.string.server_url))
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient)
.build();