为了账号安全,请及时绑定邮箱和手机立即绑定

共享偏好 Android Studio

共享偏好 Android Studio

猛跑小猪 2022-05-25 10:40:14
对于下面的代码,我正在尝试检索共享首选项,我认为它保存正确,但是当我返回登录屏幕时,所有数据都消失了。当我回到这个屏幕时,我需要它保留。所以我将姓名、年龄和身份证输入到个人资料页面上的三个单独的行中。然后我按下保存按钮然后通过按下操作栏返回之前的页面。当我回到个人资料页面时,我的信息应该仍然存在,但它没有任何帮助吗? package com.example.myprofile;import android.content.Context;import android.content.SharedPreferences;import android.preference.PreferenceManager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.sql.Savepoint;public class Profile extends AppCompatActivity {             protected EditText NameEditText;             protected EditText AgeEditText;             protected EditText IDEditText;             protected Button saveButton;             protected Button settings_id;             String name;             String age;             String id;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_profile);        EditText mEdit = (EditText) findViewById(R.id.NameEditText);        mEdit.setEnabled(false);        EditText mEdit1 = (EditText) findViewById(R.id.AgeEditText);        mEdit1.setEnabled(false);        EditText mEdit2 = (EditText) findViewById(R.id.IDEditText);        mEdit2.setEnabled(false);        NameEditText = (EditText) findViewById(R.id.NameEditText);        AgeEditText = (EditText) findViewById(R.id.AgeEditText);        IDEditText = (EditText) findViewById(R.id.IDEditText);        settings_id = (Button) findViewById(R.id.settings_id);        saveButton = (Button) findViewById(R.id.SaveButton);         SharedPreferences prefs = getSharedPreferences(getString(R.string.ProfileName), Context.MODE_PRIVATE);         name = prefs.getString("userName", "");         age = prefs.getString("userAge", "");         id = prefs.getString("userID", "");
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

为了保存


SharedPreferences pref = getSharedPreferences("Name", Context.MODE_PRIVATE);

SharedPreferences.Editor editor = pref.edit();

editor.putBoolean("keyname",true);

editor.putString("keyname","string value");

editor.putInt("keyname","int value");

editor.putFloat("keyname","float value");

editor.putLong("keyname","long value");

editor.commit();

忘记


SharedPreferences pref = getSharedPreferences("Name", Context.MODE_PRIVATE);

pref.getString("keyname",null);

pref.getInt("keyname",0);

pref.getFloat("keyname",0);

pref.getBoolean("keyname",true);

pref.getLong("keyname",0);

对于单次删除


SharedPreferences pref = getSharedPreferences("Name", Context.MODE_PRIVATE);

SharedPreferences.Editor editor = pref.edit();

editor.remove("keyname");

editor.commit();

对于所有删除


SharedPreferences pref = getSharedPreferences("Name", Context.MODE_PRIVATE);

SharedPreferences.Editor editor = pref.edit();

editor.clear();

editor.commit();


查看完整回答
反对 回复 2022-05-25
?
MMTTMM

TA贡献1869条经验 获得超4个赞

要保存数据,请使用以下代码示例


name = NameEditText.getText().toString();

age = AgeEditText.getText().toString();

id = IDEditText.getText().toString();


SharedPreferences prefs = getSharedPreferences(

      "com.example.myprofile", Context.MODE_PRIVATE);

SharedPreferences.Editor editor = prefs.edit();

editor.putString("userName", name);

editor.putString("userAge", age);

editor.putString("userID", id);

editor.apply();

要检索数据,请使用以下代码示例


SharedPreferences prefs = getSharedPreferences(

    "com.example.myprofile", Context.MODE_PRIVATE);

name = prefs.getString("userName", "");

age = prefs.getString("userAge", "");

id = prefs.getString("userID", "");

之前的onCreate方法


String name;

String age;

String id;

解释:

  • 的第一个参数getSharedPreferences是你的包名,基本上是你代码的第一行。

  • 你不需要创建多个SharedPreferences实例,一个就足够了

  • 您不需要创建多个SharedPreferences.Editor实例,一个也足够了。

  • 您可能不想使用随机的key,例如用户的用户名来保存数据,因为您随后需要通过意图将密钥传递给其他活动,如果您要这样做,为什么不发送用户名而不是钥匙?

  • 使用editor.apply()代替editor.commit()

  • onPause()在 中保存和检索数据是很常见的onResume(),因此将它们声明为全局会很有用,以避免编写额外的代码行。


查看完整回答
反对 回复 2022-05-25
?
慕森王

TA贡献1777条经验 获得超3个赞

您正在使用特定字符串( getString(R.string.ProfileAge) ....)通过使用 commit() 或 apply() 以私有模式将数据保存在共享首选项中:-


SharedPreferences sharedPreferences1 = getSharedPreferences(getString(R.string.ProfileAge), Context.MODE_PRIVATE);

                SharedPreferences sharedPreferences2 = getSharedPreferences(getString(R.string.ProfileID), Context.MODE_PRIVATE);

但是您并没有尝试在必须使用的私有模式下使用这些字符串获取该数据:-


SharedPreferences sharedPref = getSharedPreferences(getString(R.string.ProfileAge), Context.MODE_PRIVATE);

String name = sharedPref.getString("key", "defaultValue");


查看完整回答
反对 回复 2022-05-25
  • 3 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信