我試圖把URLs/etc等配置放入工具類的資源文件夾中使用。但是,我不想從各地的活動中傳遞語境。我希望能夠通過路徑名稱訪問資源(看起來像assets /專爲此目的而設計),而不使用上下文來訪問資源。訪問沒有上下文的資源
在這種特殊情況下,我想要一個單例在實例化時在配置中使用某些東西。在實例化過程中除了那一次之外,它不需要任何資源。因此,每次調用getInstance()時都必須傳遞一個Context,這完全是浪費。
此外,這是特定於應用程序的配置,不應該存儲在共享系統文件或類似的東西。
我試圖把URLs/etc等配置放入工具類的資源文件夾中使用。但是,我不想從各地的活動中傳遞語境。我希望能夠通過路徑名稱訪問資源(看起來像assets /專爲此目的而設計),而不使用上下文來訪問資源。訪問沒有上下文的資源
在這種特殊情況下,我想要一個單例在實例化時在配置中使用某些東西。在實例化過程中除了那一次之外,它不需要任何資源。因此,每次調用getInstance()時都必須傳遞一個Context,這完全是浪費。
此外,這是特定於應用程序的配置,不應該存儲在共享系統文件或類似的東西。
使用
Resources.getSystem().getString(android.R.string.someuniversalstuff)
你可以在你的應用程序ABSOLUTELY任何地方使用它,即使是在靜態常量聲明!但僅限於系統資源。
對於本地資源使用that solution。
不幸的是,我不認爲有一個真正的解決方法。我把這樣的東西放在這裏,並且傳入getApplicationContext()而不是活動上下文。
public static AppController getAppController(Context context){
if(self == null) {
//Create instance
self = new AppController();
}
return self;
}
然後:
appController = AppController.getAppController(getApplicationContext());
我建議做以下幾點: 而不是傳遞方面處處讓您的活動類單例類與返回上下文公共職能:
private static ActivityMain instance;
初始化內部super.onCreate之前的onCreate()( ):
instance = this;
這些公共職能然後添加到您的活動:
/** Get singleton instance of activity **/
public static ActivityMain getInstance() {
return instance;
}
/** Returns context of this activity **/
public static Context getContext(){
return instance.getApplicationContext();
}
現在你可以使用任何種類的任何位置以下:
Context context = AntiMorphActivity.getContext();
String packageName = context.getPackageName();
int id = context.getResources().getIdentifier("web_page", "raw", packageName);
非常可怕的解決方案。你正在以這種方式泄露你的活動。 – 2012-12-12 14:09:07
不,他正在使用應用程序上下文,因此活動不會泄露。 – Davor 2013-01-13 12:09:40
你可以擴展主應用程序類,並提供通用的助手那裏訪問資源。這減輕了對上下文的需求,因爲應用程序將提供上下文而不是調用者。應用程序類是單例風格的,並且應用程序的任何部分都在運行時(包括服務)應始終可用。
public class MyApplication extends Application {
protected static MyApplication instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static Resources getResources() {
return instance.getResources();
}
}
這將使您能夠訪問:
MyApplication.getResources()....
一定要在你的清單申報您的自定義應用程序來訪問此。假設您的自定義應用程序是在應用程序的命名空間的根:
<application
android:name=".MyApplication"
... >
使用這個有什麼潛在的缺點嗎? – 2017-11-12 00:35:59
的計算器回答以下問題說明了如何使用POJO來獲得流的資源,如果你提供的路徑。如果您需要從衆多資源中選擇特定資源,這可能會很有用。
Is it possible to read a raw text file without Context reference in an Android library project
**但僅限系統資源。** – Youngjae 2015-11-18 14:40:13
@Youngjae yes。對於本地人來說,請參考參考資料。 – Gangnus 2015-11-19 00:07:25
我得到一個異常:android.content.res.Resources $ NotFoundException:字符串資源ID – vinidog 2016-05-29 18:50:33