我试图从共享首选项中获取字符串值,并将其设置在文本视图中。我还将这个字符串值转换为整数,并在进度条中将其设置为进度值。
我不明白这一点。代码在2天前就可以使用了,但是这次并不能正常工作。我已经尝试了很多次,但无法获得真正的问题和解决方案。
package com.example.pushups;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class TrainingActivity extends AppCompatActivity {
static String t;
static Integer tt;
public static final String SHARED_PREF2="shared";
public static final String TEXT2="text";
static ProgressBar progressBarTraining;
static TextView ProgressText,ProgresDaysLeft;
static int progressSet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_training);
ProgresDaysLeft=(TextView)findViewById(R.id.daysLeft);
ProgressText=(TextView)findViewById(R.id.proText);
progressBarTraining=(ProgressBar)findViewById(R.id.progressBar4);
btn_day1=(Button)findViewById(R.id.d1);
btn_day2=(Button)findViewById(R.id.d2);
btn_day3=(Button)findViewById(R.id.d3);
btn_day4=(Button)findViewById(R.id.d4);
btn_day5=(Button)findViewById(R.id.d5);
btn_day6=(Button)findViewById(R.id.d6);
btn_day7=(Button)findViewById(R.id.d7);
progressBarTraining.setProgress(0);
update();
}
public void update() {
SharedPreferences sharedPreferences=getSharedPreferences(SHARED_PREF2,MODE_PRIVATE);
t=sharedPreferences.getString(TEXT2,"");
Toast.makeText(this, t.toString().trim(), Toast.LENGTH_SHORT).show();
ProgressText.setText(t);
progressBarTraining.setProgress(Integer.valueOf(t));
tt=Integer.valueOf(t);
if (tt==0){
ProgressText.setText("0%");
}
else if (tt==15){
ProgressText.setText("15%");
}
else if (tt==30){
ProgressText.setText("30%");
}
else if (tt==45){
ProgressText.setText("45%");
}
else if (tt==60){
ProgressText.setText("60%");
}
else if (tt==75){
ProgressText.setText("75%");
}
else if (tt==90){
ProgressText.setText("90%");
}
}
}
答案 0 :(得分:0)
我可以在这里看到一些问题:
变量不应为静态。当活动将被销毁且这些活动将不在屏幕上时,您的程序仍将保留对它们的引用-防止垃圾收集器删除它们并释放内存。
btn_day1
,btn_day2
等未在任何地方定义,您的应用仍可以编译的奇迹是:P
:t=sharedPreferences.getString(TEXT2,"");
为t
分配了先前存储在SP中的字符串,或者如果没有存储任何内容,则分配了空字符串。
如果未存储任何内容,则此空字符串将导致以后的行tt=Integer.valueOf(t);
使您的应用程序崩溃-出现异常,指出该"" could not be converted to an int
。我将分配一个不同的默认值,例如"0"
或String.format(Int.MIN_VALUE)
。
答案 1 :(得分:0)
public void update() {
SharedPreferences sharedPreferences=getSharedPreferences(SHARED_PREF2,MODE_PRIVATE);
t=sharedPreferences.getString(TEXT2,"");
Toast.makeText(this, t.toString().trim(), Toast.LENGTH_SHORT).show();
if (t.isEmpty()){
ProgressText.setText("dara");
progressBarTraining.setProgress(0);
tt=0;
}else {
ProgressText.setText(t);
progressBarTraining.setProgress(Integer.valueOf(t));
tt=Integer.valueOf(t);
if (tt==0){
ProgressText.setText("0%");
}
else if (tt==15){
ProgressText.setText("15%");
}
else if (tt==30){
ProgressText.setText("30%");
}
else if (tt==45){
ProgressText.setText("45%");
}
else if (tt==60){
ProgressText.setText("60%");
}
else if (tt==75){
ProgressText.setText("75%");
}
else if (tt==90){
ProgressText.setText("90%");
}
}