在tap计数器应用程序中引入Sharedpreference会导致应用程序崩溃

时间:2017-06-22 18:48:05

标签: android sharedpreferences

我正在尝试做一个基本的点击计数器应用程序,它将计数器值存储到共享首选项。当我运行它时,应用程序像没有共享首选项的分接计数器一样正常工作,但是当我引入共享首选项时,应用程序崩溃。

MainActivity

src/timeline.js

第二个活动从共享偏好中获取值并显示奖杯级名称,如1-25 =初学者,26-50 =中间等等在代码中,我不认为有问题但不伤害如果你看到它。

TrophyActivity

public class MainActivity extends AppCompatActivity {

public static final String PREFS = "examplePrefs";
Button btn_tap, btn_trophy, btn_reset;
TextView tv_tapped, tv_times, tv_tap1;
private int counter = 0;

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

    btn_tap = (Button) findViewById(R.id.btn_tap);
    btn_trophy = (Button) findViewById(R.id.btn_trophy);
    btn_reset = (Button) findViewById(R.id.btn_reset);
    tv_tap1 = (TextView) findViewById(R.id.tv_tap1);
    tv_tapped = (TextView) findViewById(R.id.tv_tapped);
    tv_times = (TextView) findViewById(R.id.tv_times);

    SharedPreferences example = getSharedPreferences(PREFS, counter);
    int valueString = example.getInt("userValue", 0);
    tv_tapped.setText(valueString);

    btn_tap.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            counter +=1;
            tv_tapped.setText(counter);
            tv_tapped.setTextColor(Color.BLUE);

            SharedPreferences example = getSharedPreferences(PREFS, counter);
            SharedPreferences.Editor editor = example.edit();
            editor.putInt("userValue", counter);
            editor.commit();

        }
    });
    btn_reset.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            counter = 0;
            tv_tapped.setText(counter);
            tv_tapped.setTextColor(Color.RED);
        }
    });

    btn_trophy.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this, TrophyActivity.class);
            startActivity(i);
        }
    });

  }
}

感谢您的帮助! : - )

1 个答案:

答案 0 :(得分:1)

TextViewint不是好朋友所以请使用:

tv_tapped.setText(String.valueOf(valueString)); // will convert the int to String
tv_tapped.setText(String.valueOf(counter));     // another case 

当您从void setText (int resid)

传递Android所做的int
  

使用字符串资源标识符

设置要显示的文本

所以既然找不到资源匹配,因为它只是你传递的随机数,所以异常