【问题标题】:SharedPreferences Save value of Int in a TextViewSharedPreferences 在 TextView 中保存 Int 的值
【发布时间】:2017-10-06 13:21:43
【问题描述】:

我尝试使用 SharedPreferences 保存 TextView 中显示的 int 值,但它根本无法工作。我做了一个简单的小代码示例:

public class MainActivity extends Activity {

Button search;
TextView tvRing;
int redRing;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final SharedPreferences prefs = getSharedPreferences("sharedPreferences", Context.MODE_PRIVATE);

    search = (Button) findViewById(R.id.radar);
    tvRing = (TextView) findViewById(R.id.ring);

    int someint = prefs.getInt("someint", 0);
    tvRing.setText("Objects found : " + String.valueOf(someint));

    search.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            addRing();
            SharedPreferences.Editor editor = prefs.edit();
            editor.putInt("someint", redRing);
            editor.commit();
        }
    });
}

public void addRing() {
    redRing++;
}
}

谢谢大家的帮助。

【问题讨论】:

  • 您的代码看起来不错,“根本无法工作”是什么意思?
  • 我想保存 TextView 的值,因为当用户单击按钮时 int 会增加,但是如果我退出应用程序并再次返回,TextView 的值会返回默认值 0。可以根本无法保存我的意思的数据
  • 你在哪里使用 someint?
  • 是的,也许我必须在 TextView 中使用 someint 的值?
  • 再次检查我的答案,我进行了编辑

标签: android textview int save sharedpreferences


【解决方案1】:

你应该使用

SharedPreferences.Editor editor = prefs.edit();
        editor.putInt("someint", redRing);
        editor.apply();

而且你从不使用“someint”,使用

tvRing.setText(String.valueOf(someint));

【讨论】:

  • 你从不使用“someint”
  • 把它放在你指定 someint 的行下面
  • 好的,int 的值已保存在 SharedPreferences 中,但现在在 TextView 上,当我单击“搜索”按钮时,该值不会增加,但是如果我退出应用程序并再次返回在我的应用程序上,TextView 已更新,你知道为什么吗?
  • 我根据你的建议编辑了我的帖子,你能检查一下有什么问题吗?
  • 更新这个 public void addRing() { redRing++; tvRing.setText(String.valueOf(redRing)); }
【解决方案2】:

我解释了我在哪里进行了更改

public class MainActivity extends Activity {

    Button search;
    TextView tvRing;

    //Making sharedpreferences and integers global for ease of use
    private SharedPreferences prefs;
    private int redRing, someint;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        search = (Button) findViewById(R.id.radar);
        tvRing = (TextView) findViewById(R.id.ring);

        //Someint default value is 0 if not ever saved before
        prefs = getSharedPreferences("sharedPreferences", Context.MODE_PRIVATE);
        someint = prefs.getInt("someint", 0);
        tvRing.setText("Objects found : " + String.valueOf(someint));

        search.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Load the lates someint in onclick
                someint = prefs.getInt("someint", 0);

                //redring is the dummy integer to increment someint
                redRing=someint+1;
                //Save the incremented value
                SharedPreferences.Editor editor = prefs.edit();
                editor.putInt("someint", redRing);
                editor.commit();

                //To show the latest number on the tv
                lastNumber();
            }
        });
    }


    public void lastNumber() {
        prefs = getSharedPreferences("sharedPreferences", Context.MODE_PRIVATE);
        someint = prefs.getInt("someint", 0);
        tvRing.setText("Objects found : " + String.valueOf(someint));
    }
}

【讨论】:

  • 我试过了,有保存价值,但问题是如果我退出应用程序并再次单击按钮搜索,TextView 再次开始为 0,但在单击之前我可以看到最后一个数字跨度>
  • 看看这个。
  • 我在 lastNumber 方法中删除了多余的最终 sharedpreferences 调用。对不起。
  • 通过此编辑,应用程序将始终记住电视中的最后一个数字。当您单击该搜索按钮时,电视中的数字将增加。这是你想要的吗?还是你只想一直从 0 开始?
  • 但是我的代码在我的应用程序中并不像那样,我只是简化了它,也许我需要改变一些东西。我解释一下:我有一个创建 Ring 对象的类,addRing() 方法在这个类上,其中 redRing int 变量增加。然后我有一个带有按钮搜索的活动,我单击它并创建一个新的 Ring,然后调用 addRing() 方法,以便用户可以找到一些新的 Ring 对象。然后我有另一个活动来展示每个不同戒指的库存,因为有不同颜色的戒指。你认为我必须改变一些东西才能做同样的事情但有 2 个活动吗?
猜你喜欢
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多