繁体   English   中英

使用SharedPreferences保存变量,但是在单击图像后返回1

[英]Variable saving with SharedPreferences, but returns to 1 upon image click

退出并重新加载游戏时,我需要保存2个变量,但是对其他变量有效的SharedPreferences无法正常工作。

相关代码:

float scoinCount;
long scoinLong;

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);

     prefs    = getSharedPreferences("LeagueClicker", Context.MODE_PRIVATE);

     float scoinCount = prefs.getFloat("scoinCount", 1.0f);
     float scoinLong = prefs.getFloat("scoinLong", 0.0f);

    // Added code is below

     this.scoinCount = scoinCount;
     this.scoinLong = (long) scoinLong;

    // Added code is above

     scoinCountMethod();
}

public void scoinCountMethod() {
    ImageView      progressbot    = new ImageView(this);
    DisplayMetrics displayMetrics = getResources().getDisplayMetrics();

    Resources r = getResources();
    FrameLayout.LayoutParams paramsP = new FrameLayout.LayoutParams((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, displayMetrics.widthPixels, r.getDisplayMetrics()), (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 23, r.getDisplayMetrics()));

    float dpWidth = displayMetrics.widthPixels / displayMetrics.density;

    prefs.edit().putFloat("scoinCount", scoinCount).commit();
    prefs.edit().putFloat("scoinLong", scoinLong).commit();

    if (scoinLong == 400) {

        scoinLong = 0;

        scoinThread.postDelayed(scoinRunnable, 1000);

        scoinCount = 1;

    }

    paramsP.leftMargin = (int) (-dpWidth * scoinCount);

    progressbot = (ImageView) findViewById(R.id.progressbottomid);

    progressbot.setLayoutParams(paramsP);

}

public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {

    case R.id.minioncentreid:

    // I am fairly certain the error is somewhere in this onClick method
    scoinCount -= 0.0025;
    scoinLong++;

    if (scoinLong >= 400) {
            scoinThread.postDelayed(scoinRunnable, 1000);
            Log.d("I should run the runnable.",
                    "Code above to run the runnable");
        } else {
            scoinCountMethod();
        }

}

};

@Override
public void onPause() {
    super.onPause();
    prefs.edit().putFloat("scoinCount", scoinCount).commit();
    prefs.edit().putFloat("scoinLong", scoinLong).commit();
}

@Override
public void onResume() {
    super.onResume();
    scoinCount = (long) prefs.getFloat("scoinCount ", 1.0f);
    scoinLong = (long) prefs.getFloat("scoinLong", 0.0f);
}

@Override
public void onStop() {
    super.onStop();
    prefs.edit().putFloat("scoinCount", scoinCount).commit();
    prefs.edit().putFloat("scoinLong", scoinLong).commit();
}

有人知道怎么修这个东西吗? 所有帮助表示赞赏。

编辑:通过添加标记为“添加的代码”的代码,并稍微更改getFloat,变量现在已保存,并在启动时加载。 但是,单击minioncentreid后,scoinCount值似乎返回到1 / 0.9975。

onResume中使用的键名中有多余的空格。 您正在使用“scoinCount”而不是在“scoinCount”。 在简历上修改为

@Override
public void onResume() {
    super.onResume();
    scoinCount = (long) prefs.getFloat("scoinCount", 1.0f);
    scoinLong = (long) prefs.getFloat("scoinLong", 0.0f);
}

尝试将键名存储在字符串变量中,并在各处使用它。 那将关于这样的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM