Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生成随机整数并将其保存到SharedReferences_Java_Android_Sharedpreferences - Fatal编程技术网

Java 生成随机整数并将其保存到SharedReferences

Java 生成随机整数并将其保存到SharedReferences,java,android,sharedpreferences,Java,Android,Sharedpreferences,当我的应用程序第一次运行时,我需要生成随机整数以给出设备id,然后将其保存到SharedPrefs,在TextView上显示id,当再次打开时,在TextView上显示SharedPrefs中保存的id public class MainActivity extends AppCompatActivity { public static final String MyPREFERENCES = "MyPrefs"; public static final String KEY_

当我的应用程序第一次运行时,我需要生成随机整数以给出设备id,然后将其保存到SharedPrefs,在TextView上显示id,当再次打开时,在TextView上显示SharedPrefs中保存的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);
    }
}
上面的代码生成随机整数并在TexView上显示,但每次我隐藏或关闭应用程序时,设备id都会改变 你能解释一下我要做什么来实现我的目标吗

应该有
“id”
按键设备

替换

!sharedpreferences.contains(id)

在这种情况下,将显示
null

因此,您必须在setText之前添加

id = sharedpreferences.getString(KEY_DEVICE,"0");

这是因为您只需检查是否没有共享首选项值,然后选择一个随机数并将其添加到设备中,但在创建方法中未获得任何值,即未获得之前存储的任何共享首选项值。只需获取存储的值,然后检查该值是否存在,如果存在,则在textview中设置,否则调用条件检查。希望它有助于在从SharedReferences获取值之前检查null。 如果为空:则保存id
否则:只取旧的

如果此检查:如果需要(!SharedReferences.contains(id))则将其嵌套在空检查下。

尝试此操作

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);
        }

包含
第一个参数是键,而不是值。您的钥匙是
key\u设备
,为什么要通过
id
进行检查?请转到链接,了解如何获取SharedReferences值。。
id = sharedpreferences.getString(KEY_DEVICE,"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);
        }