我在片段中遇到了一个非常尴尬的行为。 输出是:
this.userID: 0
和
RoomChatFragment userID: 14
但是在这种情况下,this.userID也应该是14.我的上下文丢失了什么,同时将其作为参数传递?我无法解释自己这种行为。我认为getActivity()
不会返回null
,否则会有例外。
// Fragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
context = getActivity();
user = new UserHandler(context);
messageDatabase = MessageDatabase.getInstance(context);
Log.i("debug", "RoomChatFragment userID: " + user.getUserID());
}
// UserHandler
public class UserHandler {
private final SharedPreferences sharedPrefs;
private final SharedPreferences sharedPrefsPreferences;
private Context context;
public UserHandler(Context context) {
sharedPrefs = context.getSharedPreferences("USER", 0);
sharedPrefsPreferences = PreferenceManager.getDefaultSharedPreferences(context);
this.context = context;
}
public int getUserID() {
return sharedPrefs.getInt("userID", 0);
}
public void setUserID(int userID) {
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putInt("userID", userID);
editor.apply();
}
}
// Database
public class MessageDatabase extends AbstractDatabase {
private int userID;
protected static MessageDatabase instance;
public MessageDatabase(Context context) {
super(context);
UserHandler user = new UserHandler(context);
userID = user.getUserID();
}
public static MessageDatabase getInstance(Context context) {
if (MessageDatabase.instance == null) {
MessageDatabase.instance = new MessageDatabase(context);
}
return MessageDatabase.instance;
}
// ....
@Override
protected Message cursorToObject(Cursor cursor) {
Log.i("debug", "this.userID: " + this.userID);
}
}
// AbstractDatabase
public abstract class AbstractDatabase {
protected Context context;
protected AbstractDatabase(Context context) {
this.context = context;
}
}
答案 0 :(得分:1)
我不完全确定这里发生了什么(你的代码非常混乱)。但似乎你在偏好中使用了不同的键:
context.getSharedPreferences("USER", 0);
sharedPrefs.getInt("userID", 0);
答案 1 :(得分:0)
愚蠢的我!问题是我的数据库设计的单例设计模式。我的MessageDatabase.instance
已缓存并包含旧的Context
对象,其中userID
的{{1}}为0。
我已经像这样更新了我的方法,似乎有效:
SharedPreferences