我有一个AppConstants
类,我有一些静态变量和静态方法。变量如
public static final String BASE_URL = "http://www.somevalue.com/api/";
private static String MID_FIX_API;
public static final String API_CALL = BASE_URL + getMidFixApi() + "/" + GET_KEY(appContext, KEY_FOR_KEY);
因为MID_FIX_API
是私有的所以我有它的公共getter / setter。
当我通过其setter方法AppConstants.setMidFixApi("value");
从另一个类设置其值并从其getter方法获取其值AppConstants.getMidFixApi();
一切都很好,直到现在为止
的但
问题出现在上面的行之后,我调用上面代码中显示的静态变量API_CALL
,它从变量MID_FIX_API
的getter获取值,并返回null,尽管我们之前已经传递了值。
这是整个行序列
AppConstants.setMidFixApi("getCategories"); // setting value
Log.e("InsideSuccess", "MID_FIX_API = " + AppConstants.getMidFixApi()); // working fine till here
Log.e("InsideSuccess", "API_URL = "+AppConstants.API_CALL); // here I'm getting like this http://www.somevalue.com/api/null/somePostFix
请指出我做错了什么。
答案 0 :(得分:1)
这与初始化顺序有关。当您调用AppConstants.setMidFixApi("getCategories")
时,将在设置值之前初始化 AppConstants类。因此,当初始化API_CALL
时,尚未分配MID_FIX_API
...
答案 1 :(得分:1)
如上所述,变量API_CALL
初始化一次,当前值MID_FIX_API
最初为空。
解决方法是创建一个静态方法(getApiCall()
),它只计算早先静态初始化的值,这看起来就像这样简单:
public static String getApiCall(){
return BASE_URL + getMidFixApi() + "/" + GET_KEY(appContext, KEY_FOR_KEY);
}
然后可以轻松地调用AppConstants.getApiCall()
。