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

Android共享首选项崩溃

秦渝
2023-03-14
package com.software.roux.diabcalc;

import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;

import static com.software.roux.diabcalc.R.id.bolus;

public class Settings extends AppCompatActivity {

    SharedPreferences mPrefs = getSharedPreferences("label", 0);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        setTitle("Insulin Calculator by Ben Roux");

        String bolusString = mPrefs.getString("bolus", "0");
        String corrString = mPrefs.getString("correction", "0");
        String lowString = mPrefs.getString("low", "0");
        String highString = mPrefs.getString("high", "0");

        EditText b1 = (EditText)findViewById(R.id.bolus);
        b1.setText(bolusString);

        EditText b2 = (EditText)findViewById(R.id.correction);
        b2.setText(corrString);

        EditText b3 = (EditText)findViewById(R.id.targetlow);
        b3.setText(lowString);

        EditText b4 = (EditText)findViewById(R.id.targethigh);
        b4.setText(highString);
    }

    public void switchclick(View a) {
        if (a.getId() == R.id.backbutton) {
            Intent myIntent = new Intent(Settings.this, MainActivity.class);
            Settings.this.startActivity(myIntent);
        }
    }

    public void setclick(View b) {
        if (b.getId() == R.id.setter) {

            EditText b1 = (EditText)findViewById(R.id.bolus);
            String bolussave = ""+b1;
            SharedPreferences.Editor mEditor1 = mPrefs.edit();
            mEditor1.putString("bolus", bolussave).commit();

            EditText b2 = (EditText)findViewById(R.id.correction);
            String corrsave = ""+b2;
            SharedPreferences.Editor mEditor2 = mPrefs.edit();
            mEditor2.putString("correction", corrsave).commit();


            EditText b3 = (EditText)findViewById(R.id.targetlow);
            String lowsave = ""+b3;
            SharedPreferences.Editor mEditor3 = mPrefs.edit();
            mEditor3.putString("low", lowsave).commit();


            EditText b4 = (EditText)findViewById(R.id.targethigh);
            String highsave = ""+b4;
            SharedPreferences.Editor mEditor4 = mPrefs.edit();
            mEditor4.putString("high", highsave).commit();


        }
    }
}

更新崩溃日志:

共有1个答案

韩梓
2023-03-14

稍后只需初始化sharedpreferencesmprefs。在oncreate方法中。

上下文仅在oncreate方法之后初始化。所以,这必须奏效:

SharedPreferences mPrefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        setTitle("Insulin Calculator by Ben Roux");
 mPrefs= getSharedPreferences("label", 0);

另一个问题是,在当前代码中,您只是将edittext变量的地址保存在内存中。要检索文本,请使用以下命令:

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

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

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

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

  • 我试图从SharedPreferences中获取布尔值,这是真的,但每次都会得到一个假值。名为“MyPref”的SharedPreferences文件包含以下代码: 我正在为MyActivity中的SharedPreferences添加值。使用以下代码初始化: 并通过以下方式在多个类上检索它: 我总是得到Premium的值为false,发生这种情况的原因是什么,如何解决?我使用的是android

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