对于输入字符串:“”。我已经尝试了很多次,但无法获得解决方案

时间:2019-10-29 07:05:19

标签: android

我试图从共享首选项中获取字符串值,并将其设置在文本视图中。我还将这个字符串值转换为整数,并在进度条中将其设置为进度值。

我不明白这一点。代码在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%");
        }        
    }
}

2 个答案:

答案 0 :(得分:0)

我可以在这里看到一些问题:

    指向屏幕视图(TextView,ProgressBar等)的
  1. 变量不应为静态。当活动将被销毁且这些活动将不在屏幕上时,您的程序仍将保留对它们的引用-防止垃圾收集器删除它们并释放内存。

  2. btn_day1btn_day2等未在任何地方定义,您的应用仍可以编译的奇迹是:P

  3. 在以下行中
  4. 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%");
            }

        }