获取适配器中的 sharedpreference 数据
Get the sharedpreference data in an adapter
Google 搜索并尝试了一整天如何在我的适配器中获取 sharedpreference 数据。我有一个 SharedPreferenceManager
class
public class SharedPrefManager {
static SharedPreferences sharedPreferences;
static Context mContext;
static int PRIVATE_MODE = 0;
private static final String PREF_NAME = "sessionPref";
static SharedPreferences.Editor editor;
public SharedPrefManager (Context context) {
mContext = context;
sharedPreferences = mContext.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = sharedPreferences.edit();
}
public void saveUID(Context context,String uid){
mContext = context;
sharedPreferences = mContext.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("UID", uid);
editor.commit();
}
public String getUID(){
sharedPreferences = mContext.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
return sharedPreferences.getString("UID", "");
}
public void clear(){
editor.clear();
editor.apply();
}
}
我在任何 activity 中都这样称呼 SharedPrefManager
public SharedPrefManager sharedPrefManager;
public String uid
并在 onCreate()
sharedPrefManager = new SharedPrefManager(mContext);
uid = sharedPrefManager.getUID();
现在,如何在适配器中获取相同的数据,因为下面的代码在任何适配器中都会出错
SharedPrefManager sharedPrefManager = new SharedPrefManager(context);
public String uid = sharedPrefManager.getUID();
这是我的 Adapter Class
public class MyCommentAdapter extends RecyclerView.Adapter<MyCommentAdapter.MyCommentHolder> {
Context context;
private List<MyComment> commentList;
//Here I get the null pointer error
SharedPrefManager sharedPrefManager = new SharedPrefManager(context);
public String uid = sharedPrefManager.getUID();
private DatabaseReference mDatabaseReference1=FirebaseDatabase.getInstance().getReference().child("User").child(uid).child("Comment");
最后一行代码我想用 uid 访问数据库,这就是为什么我需要来自共享首选项的 uid 值
public MyCommentAdapter(Context context, List<MyComment> commentList) {
this.context = context;
this.commentList = commentList;
}
你的context is null
。赋值后试试
SharedPrefManager sharedPrefManager ;
public String uid ;
private DatabaseReference mDatabaseReference1;
public MyCommentAdapter(Context context, List<MyComment> commentList) {
this.context = context;
sharedPrefManager = new SharedPrefManager(context);
this.commentList = commentList;
uid = sharedPrefManager.getUID();
mDatabaseReference1=FirebaseDatabase.getInstance().getReference().child("User").child(uid).child("Comment");
}
您需要在 adpater
的 constructor
中 初始化 您的 sharedPreferancne class .像这样:
private CustomSharedPreferences customSharedPreferences;
然后在你的构造函数中:
public MyCommentAdapter(Context context, List<MyComment> commentList)
{
this.context = context;
this.customSharedPrefernces = new CustomSharedPreferences(context);
this.commentList = commentList;
}
首先,在你的 RecyclerView 适配器中使用这种东西是不对的,它会降低你的滚动性能并且它违反了SRP.
但是
您可以简单地将您的 SharedPrefManager 注入 到您的适配器中:
public class MyCommentAdapter extends RecyclerView.Adapter<MyCommentAdapter.MyCommentHolder> {
private Context context;
private List<MyComment> commentList;
private SharedPrefManager sharedPrefManager;
public String uid;
public MyCommentAdapter(Context context, List<MyComment> commentList, SharedPrefManager sharedPrefManager) {
this.context = context;
this.commentList = commentList;
this.sharedPrefManager = sharedPrefManager
this.uid = sharedPrefManager.getUID();
}
}
然后在您的 activity 中创建适配器时,您可以在其构造函数中注入 sharedPrefManager。
public class SP {
/**
* @param mContext
* @param key
* @param value
*/
public static void savePreferences(Context mContext, String key, String value) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value).apply();
}
/**
* @param context
* @param keyValue
* @return
*/
public static String getPreferences(Context context, String keyValue) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
return sharedPreferences.getString(keyValue, "");
}
/**
* @param mContext
*/
public static void removeAllSharedPreferences(Context mContext) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear().apply();
}
}
Google 搜索并尝试了一整天如何在我的适配器中获取 sharedpreference 数据。我有一个 SharedPreferenceManager
class
public class SharedPrefManager {
static SharedPreferences sharedPreferences;
static Context mContext;
static int PRIVATE_MODE = 0;
private static final String PREF_NAME = "sessionPref";
static SharedPreferences.Editor editor;
public SharedPrefManager (Context context) {
mContext = context;
sharedPreferences = mContext.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = sharedPreferences.edit();
}
public void saveUID(Context context,String uid){
mContext = context;
sharedPreferences = mContext.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("UID", uid);
editor.commit();
}
public String getUID(){
sharedPreferences = mContext.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
return sharedPreferences.getString("UID", "");
}
public void clear(){
editor.clear();
editor.apply();
}
}
我在任何 activity 中都这样称呼 SharedPrefManager
public SharedPrefManager sharedPrefManager;
public String uid
并在 onCreate()
sharedPrefManager = new SharedPrefManager(mContext);
uid = sharedPrefManager.getUID();
现在,如何在适配器中获取相同的数据,因为下面的代码在任何适配器中都会出错
SharedPrefManager sharedPrefManager = new SharedPrefManager(context);
public String uid = sharedPrefManager.getUID();
这是我的 Adapter Class
public class MyCommentAdapter extends RecyclerView.Adapter<MyCommentAdapter.MyCommentHolder> {
Context context;
private List<MyComment> commentList;
//Here I get the null pointer error
SharedPrefManager sharedPrefManager = new SharedPrefManager(context);
public String uid = sharedPrefManager.getUID();
private DatabaseReference mDatabaseReference1=FirebaseDatabase.getInstance().getReference().child("User").child(uid).child("Comment");
最后一行代码我想用 uid 访问数据库,这就是为什么我需要来自共享首选项的 uid 值
public MyCommentAdapter(Context context, List<MyComment> commentList) {
this.context = context;
this.commentList = commentList;
}
你的context is null
。赋值后试试
SharedPrefManager sharedPrefManager ;
public String uid ;
private DatabaseReference mDatabaseReference1;
public MyCommentAdapter(Context context, List<MyComment> commentList) {
this.context = context;
sharedPrefManager = new SharedPrefManager(context);
this.commentList = commentList;
uid = sharedPrefManager.getUID();
mDatabaseReference1=FirebaseDatabase.getInstance().getReference().child("User").child(uid).child("Comment");
}
您需要在 adpater
的 constructor
中 初始化 您的 sharedPreferancne class .像这样:
private CustomSharedPreferences customSharedPreferences;
然后在你的构造函数中:
public MyCommentAdapter(Context context, List<MyComment> commentList)
{
this.context = context;
this.customSharedPrefernces = new CustomSharedPreferences(context);
this.commentList = commentList;
}
首先,在你的 RecyclerView 适配器中使用这种东西是不对的,它会降低你的滚动性能并且它违反了SRP.
但是
您可以简单地将您的 SharedPrefManager 注入 到您的适配器中:
public class MyCommentAdapter extends RecyclerView.Adapter<MyCommentAdapter.MyCommentHolder> {
private Context context;
private List<MyComment> commentList;
private SharedPrefManager sharedPrefManager;
public String uid;
public MyCommentAdapter(Context context, List<MyComment> commentList, SharedPrefManager sharedPrefManager) {
this.context = context;
this.commentList = commentList;
this.sharedPrefManager = sharedPrefManager
this.uid = sharedPrefManager.getUID();
}
}
然后在您的 activity 中创建适配器时,您可以在其构造函数中注入 sharedPrefManager。
public class SP {
/**
* @param mContext
* @param key
* @param value
*/
public static void savePreferences(Context mContext, String key, String value) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value).apply();
}
/**
* @param context
* @param keyValue
* @return
*/
public static String getPreferences(Context context, String keyValue) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
return sharedPreferences.getString(keyValue, "");
}
/**
* @param mContext
*/
public static void removeAllSharedPreferences(Context mContext) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear().apply();
}
}