Java 获得;无法解析方法“;尝试在Android Studio中实现GetSharedReferences时出错

Java 获得;无法解析方法“;尝试在Android Studio中实现GetSharedReferences时出错,java,android,sharedpreferences,Java,Android,Sharedpreferences,我试图创建一个类KeyValueDB,它存储与SharedReferences交互的方法,但是在定义该类时遇到了一个问题。我只希望构造函数使用正确的文件名存储一个SharedReferences对象,但得到一个“无法解析方法”getSharedReferences(java.lang.String,int)” 我正在传递一个字符串和一个int…我不确定我做错了什么。感谢您的帮助 package com.farmsoft.lunchguru.utils; import android.conte

我试图创建一个类KeyValueDB,它存储与SharedReferences交互的方法,但是在定义该类时遇到了一个问题。我只希望构造函数使用正确的文件名存储一个SharedReferences对象,但得到一个“无法解析方法”getSharedReferences(java.lang.String,int)”

我正在传递一个字符串和一个int…我不确定我做错了什么。感谢您的帮助

package com.farmsoft.lunchguru.utils;

import android.content.Context;
import android.content.SharedPreferences;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.json.JSONException;

/**
 * Created by sxs on 4/28/2014.
 */
public class KeyValueDB {
    private SharedPreferences sharedPreferences;

    public KeyValueDB(String prefName) {
        sharedPreferences = getSharedPreferences(prefName, Context.MODE_PRIVATE);
    }

你应该在那里传递一个上下文

获取字符串值的示例:

public static String getUserName(Context ctx)
{
    return getSharedPreferences(ctx).getString(PREF_USER_NAME, "");
}
其中,
PREF\u USER\u NAME
是键,第二个参数是当它找不到键时返回的

getSharedReferences()需要访问上下文

例如:

mContext.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
您需要将上下文传递到KeyValueDB的构造函数中,或者更好的方法是静态访问该上下文

我会这么做

public class KeyValueDB {
private SharedPreferences sharedPreferences;
private static String PREF_NAME = "prefs";

    public KeyValueDB() {
    // Blank
    }

    private static SharedPreferences getPrefs(Context context) {
        return context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    }

    public static String getUsername(Context context) {
        return getPrefs(context).getString("username_key", "default_username");
    }

    public static void setUsername(Context context, String input) {
        SharedPreferences.Editor editor = getPrefs(context).edit();
    editor.putString("username_key", input);
    editor.commit();
    }
}
对于需要存储的任何信息,只需重复这些get和set方法

要从活动中访问它们,请执行以下操作:

String username = KeyValueDB.getUsername(this);
其中“this”是对活动的引用。在onCreate()方法中的每个活动中设置上下文也是一种良好的做法,如:

public class myActivity extends Activity{

Context mContext;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mContext = this;

    String username = KeyValueDB.getUsername(mContext);
}
2016年7月编辑

为了响应下面的@RishirajPurohit,要设置用户名,您需要做非常相同的事情:

KeyValueDB.setUsername(mContext, "DesiredUsername");
从那时起,在前面的静态类中为您完成了所有工作,更改被提交到共享首选项文件,并被持久化,准备由get方法检索

请注意get方法,以防有人怀疑:

public static String getUsername(Context context) {
    return getPrefs(context).getString("username_key", "default_username");
}

“默认用户名”“正是它听起来的样子。如果在设置用户名之前先调用get方法,则返回该值。在这个实例中不太有用,但是当您开始使用整数和布尔值时,这对于确保健壮性非常有用。

您需要用于SharedReferences实例的上下文对象:相关帖子-谢谢!这是一个非常全面的计划answer@Kryten2k35你的回答很清楚,很有帮助。谢谢。我想什么时候设置你的用户名?这和正确操作一样?@RishirajPurohit是的,您只需执行KeyValueDB.setUsername(mContext,“DesiredUsername”);