Kal*_*glu 16 android sharedpreferences
SharedPreferences在一个现有应用中无法正常工作.我尝试了很多不同的方法,但仍然没有工作.始终获取默认值app start.
你知道为什么吗?
String default_user = "Default_User";
SharedPreferences pref = this.getSharedPreferences("TEST_SHAREDPREF", MODE_PRIVATE);
String user = pref.getString("user", default_user);
Log.d("SHARED CHECK", user);
if (user.equals(default_user)) {
SharedPreferences.Editor edit = pref.edit();
edit.putString("user", "new_user");
boolean ok = edit.commit();
user = pref.getString("user", default_user);
Log.d("SHARED WRITE", user);
Toast.makeText(this, user + " Save process: " + ok, Toast.LENGTH_LONG).show();
} else {
Log.d("SHARED READ", user);
Toast.makeText(this, "READ SharedPrefs: " + user, Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)
编辑:记录结果
该块总是返回这个不正确的应用程序,我不知道为什么
//first run
SHARED CHECK Default_User
SHARED WRITE new_user
//each time after first
SHARED CHECK Default_User
SHARED WRITE new_user
Run Code Online (Sandbox Code Playgroud)
该块始终返回此所有应用程序
//first run
SHARED CHECK Default_User
SHARED WRITE new_user
//each time after first
SHARED CHECK new_user
SHARED READ new_user
Run Code Online (Sandbox Code Playgroud)
只需使用以下方法并检查.
创建一个Java类AppTypeDetails.java
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
public class AppTypeDetails {
private SharedPreferences sh;
private AppTypeDetails() {
}
private AppTypeDetails(Context mContext) {
sh = PreferenceManager.getDefaultSharedPreferences(mContext);
}
private static AppTypeDetails instance = null;
public synchronized static AppTypeDetails getInstance(Context mContext) {
if (instance == null) {
instance = new AppTypeDetails(mContext);
}
return instance;
}
// get user status
public String getUser() {
return sh.getString("user", "");
}
public void setUser(String user) {
sh.edit().putString("user", user).commit();
}
// Clear All Data
public void clear() {
sh.edit().clear().commit();
}
}
Run Code Online (Sandbox Code Playgroud)
现在将值设置为SharedPreferences.
AppTypeDetails.getInstance(MainActivity.this).setUser(<user name>);
Run Code Online (Sandbox Code Playgroud)
获取价值表格SharedPreferences.
String userName = AppTypeDetails.getInstance(MainActivity.this).getUser();
Run Code Online (Sandbox Code Playgroud)
现在使用userName做任何事情.
经常检查
if(userName.trim().isEmpty())
{
// Do anything here.
}
Run Code Online (Sandbox Code Playgroud)
因为在SharedPreferences我们设置用户名为空("")
要么
你可以设置用户名为null SharedPreferences然后你需要检查
if(userName != null){
//do anything here
}
Run Code Online (Sandbox Code Playgroud)
对于明确的数据SharedPreferences.
AppTypeDetails.getInstance(MainActivity.this).setUser("");
Run Code Online (Sandbox Code Playgroud)
要么
AppTypeDetails.getInstance(MainActivity.this).clear();
Run Code Online (Sandbox Code Playgroud)
最后我解决了这个问题。其他开发人员之一添加了一种方法。此方法将删除 data/data/packageName 文件夹下除 libs 文件夹之外的所有文件。我认为他们尝试删除缓存文件夹。
去掉这个方法就解决了。
| 归档时间: |
|
| 查看次数: |
4395 次 |
| 最近记录: |