我在活動中使用 SharedPreferences.Editor。如何在此函式中使用 getSharedPreferences 值?我是java android的新手。
public class Dataall {
public static String calc(String nfirst, String nsecond) {
int abn1;
int abn2;
int abn3;
abn1= Integer.parseInt(nfirst);
abn2 = Integer.parseInt(nsecond);
// SharedPreferences show error but its work in another Activity
SharedPreferences prefrs = getSharedPreferences("MY_PRE_NAME",
MODE_PRIVATE);
String langu = prefrs.getString("callss", "");
if(langu.equals("first")){
abn1 = 15;
}else{
abn1 = 20;
}
abn3 = abn1 abn2;
String res = String.valueOf(res);
return res;
}
已編輯 - 我無法在上述靜態函式中使用 SharedPreferences。
uj5u.com熱心網友回復:
這里有很多我想拆開的東西。其中一部分將解釋我認為你想要什么。您有一個正在執行一些計算的類,需要您獲取存盤在 SharedPreferences 中的首選項。問題是大多數您呼叫的函式類都無法訪問 Android 的背景關系(當然,您只需要應用程式背景關系)。所以你有很多選擇,但這里有兩個。
1.) 快速和骯臟 - 要么將背景關系從盡可能遠的地方(活動或片段)傳遞到此方法中,并使用它來獲取此類共享首選項。
public class Dataall {
public static String calc(String nfirst, String nsecond, Context context) {
int abn1;
int abn2;
int abn3;
abn1= Integer.parseInt(nfirst);
abn2 = Integer.parseInt(nsecond);
SharedPreferences prefrs = PreferenceManager.getDefaultSharedPreferences(context);
String langu = prefrs.getString("callss", "");
if(langu.equals("first")){
abn1 = 15;
}else {
abn1 = 20;
}
abn3 = abn1 a bn2;
String res = String.valueOf(res);
return res;
}
通過 DI 或 Service Location 提取共享首選項,或者(最壞的選擇只是將其列為一種可能性,因為它在技術上有效)使其成為帶有包裝介面的單例。當然,您需要創建一個自定義應用程式類來獲取背景關系
//傳入選項 1 使其可模擬
public class Dataall { public static String calc(String nfirst, String nsecond, ISettingsProvider settings) { int abn1; int abn2; int abn3;
abn1= Integer.parseInt(nfirst); abn2 = Integer.parseInt(nsecond); String langu = settings.getString("callss"); if("first".equals(langu)){ abn1 = 15; }else { abn1 = 20; } abn3 = abn1 a bn2; String res = String.valueOf(res); return res; }}
//選項 2假設getFirstInstance 已在具有背景關系的某處被呼叫
public class Dataall {
public static String calc(String nfirst, String nsecond) {
int abn1;
int abn2;
int abn3;
abn1= Integer.parseInt(nfirst);
abn2 = Integer.parseInt(nsecond);
ISettingsProvider settings = SettingsProvider.getInstance();
String langu = settings.getString("callss");
if("first".equals(langu)){
abn1 = 15;
}else{
abn1 = 20;
}
abn3 = abn1 a bn2;
String res = String.valueOf(res);
return res;
}
}
public final class SettingsProvider implements ISettingsProvider {
public static bool hasBeenInitialized = false
private static ISettingsProvider instance
private SharedPreferences prefs = null
public static ISettingsProvider getFirstInstance(Context: context){
prefs = PreferenceManager.getDefaultSharedPreferences(context);
instance = SettingsProvider();
hasBeenInitialized = true;
}
public static ISettingsProvider getInstance(){
if(instance == null || hasBeenInitialized){
throw new IllegalStateException("Singleton not initialized");
}
return instance;
}
private SettingsProvider(){}
//Overrides
@Override
public String getString(String key, String defaultValue){
return if (defaultValue != null) prefs.getString(key, defaultValue) else prefs.getString(key, "");
}
}
public interface ISettingsProvider{
//put all your get|put methods here
public String getString(String key);
}
uj5u.com熱心網友回復:
更改此行: 從:
SharedPreferences prefrs = getSharedPreferences("MY_PRE_NAME",
MODE_PRIVATE);
到:
SharedPreferences prefrs = getSharedPreferences("MY_PRE_NAME",
Context.MODE_PRIVATE);
從這里獲取的答案:嘗試在 Android Studio 中實作 getSharedPreferences 時出現“無法決議方法”錯誤
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/346141.html
