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

获取具有特定名称的共享首选项

尉迟冯浩
2023-03-14

我试图将来自不同EditText和Textview框的多个变量存储在一个共享首选项中,我有一个特定的名称(因此不可能有默认的共享首选项)。从活动C保存并稍后检索工作正常。但是,如果我将它们保存在活动D的片段中并稍后尝试检索它,则会得到一个空白字段。即使是默认值也不会显示。它一定与片段有关,但我找不到正确的语法来让它工作。这个答案(片段中的共享首选项等)对我没有帮助(因为它使用默认的共享首选项)。

这里是活动C的on create方法的一部分,其中提交了共享首选项

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_produktspezifikation);

        //region BUTTON DEKLARATION
        Button neuesWST = (Button) findViewById(R.id.btn_Neu_WST);
        neuesWST.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                startActivity(new Intent(C_Produktspezifikation.this,WST_bearbeiten.class));
            }
        });

        Button Weiter = (Button) findViewById(R.id.btn_Produktspezifikation_weiter);
        Weiter.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                //region DATEN SPEICHERN
                //Variablen definieren, um die Daten aus den Feldern auszulesen
                TextView WstName = (TextView) findViewById(R.id.tv_WST);
                TextView Schnittweg = (TextView) findViewById(R.id.tv_Schnittweg_Eintrag);
                EditText Stueckzahl = (EditText) findViewById(R.id.et_Stuekzahl_Eintrag);
                EditText Losgroesse = (EditText) findViewById(R.id.et_Losgroesse_Eintrag);

                //Shared Preferences definieren
                SharedPreferences sharedpref = getSharedPreferences("Datenspeicher", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedpref.edit();

                //Daten in benannter SharedPreference speichern
                editor.putString("wstname", WstName.getText().toString());
                editor.putString("schnittweg", Schnittweg.getText().toString());
                editor.putString("stueckzahl", Stueckzahl.getText().toString());
                editor.putString("losgroesse", Losgroesse.getText().toString());
                editor.commit();
                //endregion

                startActivity(new Intent(C_Produktspezifikation.this,D_Maschine.class));

            }
        });

除了活动D的片段(另一个是相同的),其中更多的首选项是安全的:

public class Maschine_v1 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
       final  View rootView = inflater.inflate(R.layout.fragment_maschine_variante_1, container, false);

        //Variablen definieren, um die Daten aus den Feldern auszulesen
        TextView maschinenname_v1 = (TextView) rootView.findViewById(R.id.tv_m_v1_Maschine);
        TextView anschaffungswert_v1 = (TextView) rootView.findViewById(R.id.tv_m_v1_Anschaffungswert_Eintrag);
        TextView raumbedarf_v1 = (TextView) rootView.findViewById(R.id.tv_m_v1_Raumbedarf_Eintrag);
        TextView el_Anschlusswert_v1 = (TextView) rootView.findViewById(R.id.tv_m_v1_el_Anschlusswert_Eintrag);

        //Shared Preferences definieren
        SharedPreferences sharedpref = this.getActivity().getSharedPreferences("Datenspeicher", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedpref.edit();

        //Daten in benannter SharedPreference speichern
        editor.putString("maschinenname_v1", maschinenname_v1.getText().toString());
        editor.putString("anschaffungswert_v1", anschaffungswert_v1.getText().toString());
        editor.putString("raumbedarf_v1", raumbedarf_v1.getText().toString());
        editor.putString("el_anschlusswert_v1", el_Anschlusswert_v1.getText().toString());
        editor.commit();

以及活动E的一个片段,其中活动D中的共享首选项应该被检索,但没有显示:anschaffungswert_v1来自活动D(或者是片段),并且不起作用。

Schnittweg来自活动C并开始工作。

public class Werkzeug_v1 extends android.support.v4.app.Fragment {

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        final View rootView = inflater.inflate(R.layout.fragment_werkzeug_variante_1, container, false);

        TextView tv = (TextView) rootView.findViewById(R.id.tv_v1_Werkzeug_Abnutzung_Eintrag);
        TextView tv2 = (TextView) rootView.findViewById(R.id.tv_v1_Werkzeug_Schnittweg_Eintrag);
        SharedPreferences sharedPref = this.getActivity().getSharedPreferences("Datenspeicher", Context.MODE_PRIVATE);

        String test = sharedPref.getString("anschaffungswert_v1","N/A");
        String test2 = sharedPref.getString("schnittweg", "");
        tv.setText(test);
        tv2.setText(test2);

这是Datenspeicher。xml(我的共享首选项文件)保存到活动D后:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="anschaffungswert_v1"></string>
    <string name="maschinenname_v1"></string>
    <string name="schnittweg">1200</string>
    <string name="el_anschlusswert_v1"></string>
    <string name="losgroesse"></string>
    <string name="wstname">Werkstück 1</string>
    <string name="stueckzahl">33</string>
    <string name="raumbedarf_v1"></string>
</map>

共有1个答案

杨飞飙
2023-03-14

尝试使用微型数据库。。。只需添加tinyDB。java到您的项目。。。https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo?files=1

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

  • 非常感谢您的光临,我正在为学校开发一个应用程序,我遇到了另一个问题。该应用程序的主要思想是跟踪您的卡路里,我希望它能节省卡路里,所以当应用程序关闭时,它仍然会记住他们。我已经忙了一段时间了,现在尝试使用SavedPreferences,但我总是出现错误。我希望有人能帮我。 } 我可能做了很多明显的愚蠢的事情,但我真的弄不明白。 多谢!

  • 问题内容: 我想编写一个简单的查询来选择PostgreSQL中的许多列。但是,我不断收到错误-我尝试了一些选项,但它们对我没有用。目前,我收到以下错误: org.postgresql.util.PSQLException:错误:“列”处或附近的语法错误 要获取具有值的列,请尝试以下操作: 有任何想法吗? 问题答案: 是 保留字 。除非您双引号,否则不能将其用作标识符。像:。 不过,这并不意味着您应

  • 更新崩溃日志:

  • 问题内容: 请告诉我如何获取特定行的列值= 123的列名。 问题答案: 结果

  • http://codepen.io/anon/pen/wjzqww?editors=1010