java - 更新 android 中的共享首选项

标签 java android

好吧,我只是在测试共享首选项的想法以保存用户进度,但是这个简单的代码不起作用,当我通过 lev1 它应该更新 preffile 以便在下一个应用程序启动时它应该直接打开到 lev2Activity,一切没关系,即使 log cat 是干净的,但什么也没有发生,我不知道我的代码有什么问题,我们将不胜感激。

主 Activity .java

private Button b1;
public static final String levstate= "levstate";
private Context mycontext;

@Override
protected void onCreate(Bundle savedInstanceState)

{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mycontext= this;
    b1= (Button) findViewById(R.id.b1);

    b1.setOnClickListener(new View.OnClickListener()

    {

        @Override
        public void onClick(View v) {

            MainActivity.savelevstate(1, mycontext);
            Intent i= new Intent(MainActivity.this, Lev1Activity.class);
            startActivity(i);
        }

    });

}




public static void savelevstate(int state, Context mycontext)

{
    SharedPreferences pref= mycontext.getSharedPreferences("preffile", MODE_APPEND);
    Editor editor= pref.edit();
    editor.putInt("levstate", state);
    editor.commit();
}

public static int getlevstate(Context mycontext)

{
    SharedPreferences pref= mycontext.getSharedPreferences("preffile", MODE_APPEND);
    int state= pref.getInt("levstate", 1);

    return state;


}

Lev1Activity.java

私有(private) EditText et1; 私有(private)按钮 b1;

@Override
protected void onCreate(Bundle savedInstanceState) 

{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lev1);

    et1= (EditText) findViewById(R.id.et1);
    b1= (Button) findViewById(R.id.b1);

}

public void Next (View v)

{

    String value= et1.getText().toString();
    int finalvalue= Integer.parseInt(value);

    if(finalvalue==22)

    {
        Intent i = new Intent (this, Lev2Activity.class);
        startActivity(i);
        MainActivity.savelevstate(2, this);
        this.finish();




    }

}

最佳答案

您使用 sharedPreferences 的想法很棒。但是,如果您查看 MainActivity 的 onCreate(),您会发现在启动 Intent 之前您从不检查最后一级状态。应用程序运行,用户点击按钮“b1”,它立即启动 Lev1Activity。假设您希望在用户按下同一按钮时启动正确的关卡,您必须检查当前关卡状态,然后将该状态链接到其适当的关卡 Activity。

例如(MainActivity.java):

b1.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v) {

        Intent i;
        switch(getlevstate(myContext)) {
            case 1:
                i = new Intent(myContext, Lev1Activity.class);
                break;
            case 2:
                i = new Intent(myContext, Lev2Activity.class);
                break;
            case 3:
                i = new Intent(myContext, Lev3Activity.class);
                break;
            case 4
                i = new Intent(myContext, Lev4Activity.class);
                break;
            ...
        }

        startActivity(i);
    }

});

使用 MODE_APPEND 应该和使用 MODE_PRIVATE 一样有效,但是建议使用后者。

关于java - 更新 android 中的共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32060380/

相关文章:

android - 如何在工具栏中正确添加自定义 View ?

java - 使用 Java 使用 RESTful API

java - EditText 输入 3 个字母和 4 个数字 - 动态更改输入类型

java - 如何提前加载Swing和AWT组件?

安卓java.net.SocketException : socket failed: EACCES (Permission denied)

android - Android 上的搜索算法 : stack or preallocated buffer?

java - JSP 和 derby 数据库类

java - java中使用nio包的socketChannel可以从客户端套接字中获取的最大数据大小

Android Studio 3.0.1 使应用程序变得迟钝和缓慢

android - Eclipse 不在新的 Android 项目中生成文件