【问题标题】:Get or use Value of sharedpreferences in function class获取或使用函数类中 sharedpreferences 的值
【发布时间】:2021-10-30 19:39:23
【问题描述】:

我在 Activity 中使用 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。

【问题讨论】:

  • 这对我来说很合适。你想达到什么目的。比如,预期的结果是什么,问题是什么?你的逻辑无处不在。请清理它,以便我们更好地了解您要做什么。因为现在。该方法首先接收 String n,然后将其解析为 abn1 的 int。仅将 if/else 语句中 abn1 的值覆盖为 15 或 20。
  • @JonR85 SharedPreferences 不在上面的课程中工作,或者我是 java 新手,所以有探针
  • 错误信息是什么?
  • 感谢@JonR85!错误是 无法解析 Dataall 中的方法 'getSharedPreferences'无法解析符号 'MODE_PRIVATE'

标签: java android function


【解决方案1】:

这里有很多我想解开的东西。其中一部分将解释我认为你想要什么。您有一个类正在执行一些计算,需要您获取存储在 SharedPreferences 中的首选项。问题在于,大多数您调用的函数类都无法访问 Android 的上下文(假设您只需要应用程序上下文)。所以你有很多选择,但这里有两个。

1.) 快速而肮脏 - 尽可能将上下文(Activity 或 Fragment)传入此方法,并使用它来获取类似的共享首选项。

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;
}
  1. 通过 DI 或服务位置提取共享首选项,或者(最糟糕的选择只是将其列为一种可能性,因为它在技术上有效)使其成为一个带有包装接口的单例。当然,您需要创建一个自定义应用程序类来获取上下文

    //选项1传入使其可模拟

    公共类数据全部{ 公共静态字符串计算(字符串 nfirst,字符串 nsecond,ISettingsProvider 设置){ 诠释 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 ASSUMING 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);
}

【讨论】:

  • 谢谢@Kerry!根据您的友好回复解决了我的问题。
【解决方案2】:

改变这一行: 来自:

SharedPreferences prefrs = getSharedPreferences("MY_PRE_NAME", 
MODE_PRIVATE);

收件人:

SharedPreferences prefrs = getSharedPreferences("MY_PRE_NAME", 
Context.MODE_PRIVATE);

答案取自这里:Getting "cannot resolve method" error when trying to implement getSharedPreferences in Android Studio

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多