Android SharedPreferences示例

3

我将尝试学习SharedPreferences,但是出现了错误。

我的布局有一个按钮,响应方法doThis

以下是我的java代码:

package com.example.sharedprefs;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {
    int i = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    public void doThis (View view){
        i++;
        SharedPreferences sharedPref = getSharedPreferences("FileName",MODE_PRIVATE);
        SharedPreferences.Editor prefEditor = sharedPref.edit();
        prefEditor.putInt("userChoice",i);
        prefEditor.commit();
        int number = sharedPref.getInt("userChoice", 0);
        Toast.makeText(getApplicationContext(), number, Toast.LENGTH_LONG).show();
    }

}

根据logcat日志,唯一可以确定的是:10-15 19:28:17.707: E/AndroidRuntime(16657): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x1

3个回答

8

您的Toast提示不正确。您传递了一个数字给Toast,希望它返回一个字符串,但实际上它认为应该查找一个字符串资源值。请尝试如下:

Toast.makeText(getContext(), number + "" , Toast.LENGTH_LONG).show();

除此之外,你的代码很好。请注意修改。


完美。谢谢。有人可以评论我的实际“SharedPref”代码的正确性吗?它是否编写正确。 - EGHDK
@EGHDK,是的,本质上是正确的。不过,我会把它[提交]放在自己的方法中。 - ahodder

0
这里的问题是您正在使用整数值作为Toast字符串。您需要执行以下操作。
String.valueOf(number);

或者

Integer.toString(number);

你的SharedPreferences部分没问题。但是如果想了解更多关于SharedPreferences的信息,可以访问这篇文章。 Android SharedPreferences Example


这个问题在5年前就已经被回答了...但还是谢谢! - EGHDK

0

你不能将整数类型转换为Toast消息。

你只能将字符串类型放入消息参数中,以便使用Toast.makeText方法。

至于解决方案,你可以尝试以下方法:

Toast.makeText(getApplicationContext(), Integer.toString(number), Toast.LENGTH_LONG).show();

Toast.makeText(getApplicationContext(), ""+number, Toast.LENGTH_LONG).show();

没错,你的sharedpreference使用是完全正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接