【问题标题】:Saving int variable using SharedPreferences (not working)使用 SharedPreferences 保存 int 变量(不起作用)
【发布时间】:2015-05-03 06:44:05
【问题描述】:

我创建了一个应用程序,在单击按钮时,它的整数值从 0 增加 1。(它显示在 textView 中) 我要做的是保存该 int 变量,以便在重新启动应用程序后保留修改后的值。 我试图使用这些方法,将它们放在 onClick(increase) 方法以及 onCreate 中,但似乎没有任何效果:

SharedPreferences mPrefs = getSharedPreferences("label", 0);
Integer var = mPrefs.getInt("var", variable);

SharedPreferences.Editor mEditor = mPrefs.edit();
mEditor.putInt("tag", variable).commit();

还有这个:

SharedPreferences sharedPref= getSharedPreferences("mypref", 0);
SharedPreferences.Editor editor= sharedPref.edit();
editor.putInt("name", variable);
editor.commit();

getSharedPreferences("name", variable);

退出应用并启动后,该值会重置为 0

这里是完整的代码:

import android.content.SharedPreferences;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class TestApp extends ActionBarActivity {

    public int variable = 0;

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

        TextView statnumber = (TextView) findViewById(R.id.number);
        statnumber.setText(String.valueOf(variable));

        SharedPreferences mPrefs = getSharedPreferences("var", 0);
        Integer var = mPrefs.getInt("var", variable);

        SharedPreferences.Editor mEditor = mPrefs.edit();
        mEditor.putInt("var", variable).commit();
    }

    public void increase(View view){
        TextView statnumber = (TextView) findViewById(R.id.number);
        statnumber.setText(String.valueOf(variable = variable + 1));
    }
}

这是 logcat 所说的(可能不重要..):

05-02 22:23:53.010  10827-10827/com.rpd.testapp D/OpenGLRenderer﹕ Enabling debug mode 0
05-02 22:24:56.200  11058-11058/com.asd.testapp D/dalvikvm﹕ Late-enabling CheckJNI
05-02 22:24:56.440  11058-11058/com.asd.testapp D/ActivityThread﹕ setTargetHeapUtilization:0.25
05-02 22:24:56.450  11058-11058/com.asd.testapp D/ActivityThread﹕ setTargetHeapIdealFree:8388608
05-02 22:24:56.450  11058-11058/com.asd.testapp D/ActivityThread﹕ setTargetHeapConcurrentStart:2097152
05-02 22:24:56.730  11058-11058/com.asd.testapp I/dalvikvm﹕ Could not find method android.view.ViewGroup.onNestedScrollAccepted, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onNestedScrollAccepted
05-02 22:24:56.810  11058-11058/com.asd.testapp W/dalvikvm﹕ VFY: unable to resolve virtual method 12212: Landroid/view/ViewGroup;.onNestedScrollAccepted (Landroid/view/View;Landroid/view/View;I)V
05-02 22:24:56.810  11058-11058/com.asd.testapp D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000
05-02 22:24:56.810  11058-11058/com.asd.testapp I/dalvikvm﹕ Could not find method android.view.ViewGroup.onStopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onStopNestedScroll
05-02 22:24:56.810  11058-11058/com.asd.testapp W/dalvikvm﹕ VFY: unable to resolve virtual method 12218: Landroid/view/ViewGroup;.onStopNestedScroll (Landroid/view/View;)V
05-02 22:24:56.810  11058-11058/com.asd.testapp D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000
05-02 22:24:56.810  11058-11058/com.asd.testapp I/dalvikvm﹕ Could not find method android.support.v7.internal.widget.ActionBarOverlayLayout.stopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.setHideOnContentScrollEnabled
05-02 22:24:56.810  11058-11058/com.asd.testapp W/dalvikvm﹕ VFY: unable to resolve virtual method 9783: Landroid/support/v7/internal/widget/ActionBarOverlayLayout;.stopNestedScroll ()V
05-02 22:24:56.810  11058-11058/com.asd.testapp D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x000e
05-02 22:24:56.900  11058-11058/com.asd.testapp I/dalvikvm﹕ Could not find method android.view.ViewGroup.onRtlPropertiesChanged, referenced from method android.support.v7.widget.Toolbar.onRtlPropertiesChanged
05-02 22:24:56.910  11058-11058/com.asd.testapp W/dalvikvm﹕ VFY: unable to resolve virtual method 12215: Landroid/view/ViewGroup;.onRtlPropertiesChanged (I)V
05-02 22:24:56.910  11058-11058/com.asd.testapp D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0007
05-02 22:24:56.930  11058-11058/com.asd.testapp I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations
05-02 22:24:56.930  11058-11058/com.asd.testapp W/dalvikvm﹕ VFY: unable to resolve virtual method 396: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
05-02 22:24:56.930  11058-11058/com.asd.testapp D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
05-02 22:24:56.930  11058-11058/com.asd.testapp I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType
05-02 22:24:56.930  11058-11058/com.asd.testapp W/dalvikvm﹕ VFY: unable to resolve virtual method 418: Landroid/content/res/TypedArray;.getType (I)I
05-02 22:24:56.930  11058-11058/com.asd.testapp D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
05-02 22:24:56.930  11058-11058/com.asd.testapp I/dalvikvm﹕ Could not find method android.content.res.Resources.getDrawable, referenced from method android.support.v7.internal.widget.ResourcesWrapper.getDrawable
05-02 22:24:56.930  11058-11058/com.asd.testapp W/dalvikvm﹕ VFY: unable to resolve virtual method 359: Landroid/content/res/Resources;.getDrawable (ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
05-02 22:24:56.930  11058-11058/com.asd.testapp D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
05-02 22:24:56.940  11058-11058/com.asd.testapp I/dalvikvm﹕ Could not find method android.content.res.Resources.getDrawableForDensity, referenced from method android.support.v7.internal.widget.ResourcesWrapper.getDrawableForDensity
05-02 22:24:56.940  11058-11058/com.asd.testapp W/dalvikvm﹕ VFY: unable to resolve virtual method 361: Landroid/content/res/Resources;.getDrawableForDensity (IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
05-02 22:24:56.940  11058-11058/com.asd.testapp D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
05-02 22:24:57.170  11058-11058/com.asd.testapp D/libEGL﹕ loaded /system/lib/egl/libEGL_adreno200.so
05-02 22:24:57.190  11058-11058/com.asd.testapp D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_adreno200.so
05-02 22:24:57.190  11058-11058/com.asd.testapp D/libEGL﹕ loaded /system/lib/egl/libGLESv2_adreno200.so
05-02 22:24:57.200  11058-11058/com.asd.testapp I/Adreno200-EGL﹕ <qeglDrvAPI_eglInitialize:299>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_JB_REL_2.0.3.1_RB1.04.01.01.45.000_msm8625_JB_REL_2.0.3.1_Merge_release_AU (Merge)

这是我第一次创建创建缓存的应用程序,所以我不完全了解它是如何工作的。任何帮助表示赞赏。

【问题讨论】:

    标签: java android onclick int sharedpreferences


    【解决方案1】:

    在您的TestApp 活动中,var 始终返回 0。下面是您存储在 MyPrefsFile 文件中的所有值,key=silentMode

    如何从 SharedPreferences 中获取值

           public static final String PREFS_NAME = "MyPrefsFile";
           SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); //PREFS_NAME is file name not your key name
           boolean silent = settings.getBoolean("silentMode", false);
           setSilent(silent);
    

    如何存储值

          SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
          SharedPreferences.Editor editor = settings.edit();
          editor.putBoolean("silentMode", mSilentMode);
    
          // Commit the edits!
          editor.commit();
    

    你真的需要访问Official Doc - Storage Options Shared Preferences

    【讨论】:

      【解决方案2】:

      我在 onCreate 中看不到 variable 发生更改的任何地方。因此,您存储了它被初始化的值添加 - 0。这就是为什么您不断从首选项中获得 0。

      【讨论】:

        【解决方案3】:

        试试这个 SharedPreferences myPreference =getSharedPreferences("sharedpref_name", MODE_PRIVATE); // 将数据写入 SharedPreferences 编辑器 editor = myPreference.edit(); editor.putString("var_name", "variable_value"); editor.commit();

        【讨论】:

          【解决方案4】:
              SharedPreferences myPreference =getSharedPreferences("sharedpref_name",   MODE_PRIVATE);
          
              // Writing data to SharedPreferences
               Editor editor = myPreference.edit();
               editor.putString("var_name", "variable_value");
               editor.commit();                
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-07-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-07
            • 2017-11-22
            • 2018-11-14
            相关资源
            最近更新 更多