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