当我的应用首次运行时,我需要生成随机int以提供设备ID,然后将其保存到SharedPreffs,在TextView上显示id,再次打开时显示来自TextView上SharedPreffs的已保存ID。
public class MainActivity extends AppCompatActivity {
public static final String MyPREFERENCES = "MyPrefs";
public static final String KEY_DEVICE = "id";
SharedPreferences sharedpreferences;
String id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
deviceid = (TextView) findViewById(R.id.deviceid);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
if (!sharedpreferences.contains(id)) {
SharedPreferences.Editor editor = sharedpreferences.edit();
id = String.valueOf(new Random().nextInt(900000) + 100000);
editor.putString(KEY_DEVICE, id);
editor.commit();
deviceid.setText(id);
}
deviceid.setText(id);
}
}
上面的代码生成随机int并在TexView上显示,但每次隐藏或关闭应用程序时,设备ID都会更改 你能解释一下我必须做些什么才能实现我的目标。
答案 0 :(得分:2)
应该有"id"
或KEY_DEVICE
替换
!sharedpreferences.contains(id)
到
!sharedpreferences.contains(KEY_DEVICE)
另外
deviceid.setText(id);
在这种情况下,会显示null
所以你必须在setText之前添加
id = sharedpreferences.getString(KEY_DEVICE,"0");
答案 1 :(得分:0)
这是因为您只是检查是否没有共享首选项值然后选择一个随机数并将其添加到设备但是您没有在on create方法中获得任何值,即您没有获得任何共享首选项值存储之前。只需获取存储的值,然后检查值是否存在,如果存在,则在textview中设置,否则调用条件检查。希望它有助于
答案 2 :(得分:0)
在从sharedPreferences获取值之前检查null。 如果为null:则保存id 否则:只获取旧版本。
如果进行此检查:如果需要(!sharedpreferences.contains(id)),请将其嵌套在null检查下。
答案 3 :(得分:0)
试试这个
String MyPREFERENCES = "MyPrefs";
String KEY_DEVICE = "device_id";
SharedPreferences sharedpreferences;
SharedPreferences.Editor editor;
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
if (sharedpreferences.contains(KEY_DEVICE)) {
id = sharedpreferences.getString(KEY_DEVICE, "0");
deviceid.setText(id);
} else {
id = String.valueOf(new Random().nextInt(900000) + 100000);
editor = sharedpreferences.edit();
editor.putString(KEY_DEVICE, id);
editor.apply();
deviceid.setText(id);
}