当前位置: 首页 > 知识库问答 >
问题:

共享首选项Android Studio

仲智
2023-03-14

对于下面的代码,我正在尝试检索共享的首选项,我认为它保存正确,但当我回到登录屏幕时,所有的数据都消失了。我需要它留在我回到这个屏幕上。所以我在个人资料页面上输入姓名、年龄和id到三个单独的行中。然后按下save按钮,然后按下action Bar上的back转到前面的页面。当我回到个人资料页面时,我的信息应该还在那里,但它没有任何帮助?

 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", "");


        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                String name = NameEditText.getText().toString();
                String age = AgeEditText.getText().toString();
                String id = IDEditText.getText().toString();
                SharedPreferences sharedPreferences = getSharedPreferences(getString(R.string.ProfileName), Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString(getString(R.string.ProfileName), name);
                editor.putString(getString(R.string.ProfileAge), age);
                editor.putString(getString(R.string.ProfileID), id);
                editor.apply();


                  if (Integer.parseInt(age) < 18)
                {
                    Toast toast1 = Toast.makeText(getApplicationContext(), "Invalid Age", Toast.LENGTH_LONG);
                    toast1.show();
                }
                  else if (!name.isEmpty() && !age.isEmpty() && !id.isEmpty())
                  {
                      getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                      Toast toast = Toast.makeText(getApplicationContext(), "Name Saved!", Toast.LENGTH_LONG);
                      toast.show();
                  }
                  else
                {
                    Toast toast2 = Toast.makeText(getApplicationContext(), "Incomplete Info", Toast.LENGTH_LONG);
                    toast2.show();
                }


            }
        });

        getSupportActionBar().setDisplayHomeAsUpEnabled(false);

    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.settings_id:
            {
                EditText mEdit = (EditText) findViewById(R.id.NameEditText);
                mEdit.setEnabled(true);
                EditText mEdit1 = (EditText) findViewById(R.id.AgeEditText);
                mEdit1.setEnabled(true);
                EditText mEdit2 = (EditText) findViewById(R.id.IDEditText);
                mEdit2.setEnabled(true);
                saveButton.setEnabled(Boolean.parseBoolean("True"));
            }
            default:
                return super.onOptionsItemSelected(item);

        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;

    }
}

共有1个答案

上官季
2023-03-14

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

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;

说明:

  • GetSharedPreference的第一个参数是包名,基本上是代码中的第一行。
  • 您不需要创建多个SharedPreference实例,一个就足够了
  • 您不需要创建多个SharedPreferences.Editor实例,一个实例也足够。
  • 您可能不想使用随机的密钥(例如用户的用户名)来保存数据,因为您需要通过意图将密钥传递给其他活动,如果要这样做,为什么不发送用户名而不是密钥呢?
  • 使用editor.apply()而不是editor.commit()
  • 通常将数据保存在onpause()中,并在onresume()中检索,因此将数据声明为全局数据会很有用,以避免编写额外的代码行。
 类似资料:
  • 非常感谢您的光临,我正在为学校开发一个应用程序,我遇到了另一个问题。该应用程序的主要思想是跟踪您的卡路里,我希望它能节省卡路里,所以当应用程序关闭时,它仍然会记住他们。我已经忙了一段时间了,现在尝试使用SavedPreferences,但我总是出现错误。我希望有人能帮我。 } 我可能做了很多明显的愚蠢的事情,但我真的弄不明白。 多谢!

  • 更新崩溃日志:

  • 当我发送FCM消息且应用程序处于后台时,我想清除共享首选项。在方法中,我正在调用一个方法来清除它们。 我得到以下错误: 未处理的异常:MissingPluginException(在channel plugins.flatter.io/shared_首选项上找不到方法getAll的实现)

  • 问题内容: 我在这个.java文件中有一个SharedPreference;在底部,您可以看到我将值保存到SharedPreferences GB_PREFERENCES_BENCH和GB_PREFERENCES_FLIES。如何在其他活动中使用这些值?请参阅第二个代码示例以了解如何使用它。 这是我要使用的方式;(特别是在on create方法中,将TextView的文本设置为SharePrefe

  • 我正在创建一个番茄工作计时器应用程序。它有2项活动: 主要活动是设置时间 我已经创建了一个对象,它保存了设置的时间,我希望这些时间显示在Recents活动中的按钮中。但是,似乎没有保存数据,而是显示了包名称。

  • 你好,我正在尝试保存一个共享首选项的主题。当用户点击某个主题的按钮时,我希望该主题被设置为默认并保存,所以当他们重新打开应用程序时,它仍然是那个新主题。