2017-06-22 57 views
0

我正在尝试做一个基本的水龙头计数器应用程序,它将计数器值存储到sharedpreference。当我运行应用程序时,应用程序与没有sharedpreference的tap计数器一样正常工作,但是当我引入sharedpreference时,应用程序崩溃。自来水柜台应用程序中Sharedpreference介绍导致应用程序崩溃

MainActivity

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); 
     } 
    }); 

    } 
} 

第二活动从sharedpreference得到值,并显示奖杯水平的名称,如1-25 =初学者,26-50 =中间等它是在代码中,这我不认为有问题,但如果你看到它并没有伤害。

TrophyActivity

public class TrophyActivity extends AppCompatActivity { 

public static final String PREFS = "examplePrefs"; 
Button btn_back, btn_exit; 
TextView tv_congrats, tv_received, tv_trophyName, tv_trophy; 
ImageView iV_trophy; 

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

    btn_back = (Button) findViewById(R.id.btn_back); 
    btn_exit = (Button) findViewById(R.id.btn_exit); 
    tv_congrats = (TextView) findViewById(R.id.tv_congratulations); 
    tv_received = (TextView) findViewById(R.id.tv_received); 
    tv_trophyName = (TextView) findViewById(R.id.tv_trophy_name); 
    tv_trophy = (TextView) findViewById(R.id.tv_trophy); 
    iV_trophy = (ImageView) findViewById(R.id.iV_trophy); 

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

    if (valueString<=25){ 
     tv_trophyName.setText("Beginner"); 
     iV_trophy.setImageResource(R.drawable.ic_beginner); 
    }else if (valueString<=50){ 
     tv_trophyName.setText("Intermediate"); 
     iV_trophy.setImageResource(R.drawable.ic_ntermediate); 
    }else if (valueString<=75){ 
     tv_trophyName.setText("Semi Jumbo"); 
     iV_trophy.setImageResource(R.drawable.ic_semi_jumbo); 
    }else if (valueString<=100){ 
     tv_trophyName.setText("Jumbo"); 
     iV_trophy.setImageResource(R.drawable.ic_jumbo); 
    } 

    btn_back.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      TrophyActivity.super.onBackPressed(); 
     } 
    }); 

    btn_exit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      moveTaskToBack(true); 
      android.os.Process.killProcess(android.os.Process.myPid()); 
      System.exit(1); 
     } 
    }); 

    } 
} 

感谢您的帮助提前! :-)

回答

1

TextViewint是不好的朋友这样使用:

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

当你传递一个int什么Android为是,从void setText (int resid)

设置要使用要显示的文字字符串资源标识符

这样既然不会有资源e找到匹配,因为它只是一个随机数传递给你,所以例外

+1

谢谢,它的工作 – Alex