Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在Snackbar中设置计时器_Java_Android_Timer_Android Snackbar - Fatal编程技术网

Java 无法在Snackbar中设置计时器

Java 无法在Snackbar中设置计时器,java,android,timer,android-snackbar,Java,Android,Timer,Android Snackbar,我正在尝试在Snackbar中设置计时器,到目前为止,我已经尝试过了,并且让计时器工作,但在getTime()方法中没有,我认为可能是这种情况,这就是为什么它不工作的原因 我很抱歉,如果这是一个太糟糕的问题,我只做Android作为一个附带项目 public class MainActivity extends AppCompatActivity { private static final String AUDIO_RECORDER_FILE_EXT = ".3gp"; private st

我正在尝试在Snackbar中设置计时器,到目前为止,我已经尝试过了,并且让计时器工作,但在
getTime()
方法中没有,我认为可能是这种情况,这就是为什么它不工作的原因

我很抱歉,如果这是一个太糟糕的问题,我只做Android作为一个附带项目

public class MainActivity extends AppCompatActivity {

private static final String AUDIO_RECORDER_FILE_EXT = ".3gp";
private static final String AUDIO_RECORDER_FOLDER = "VRemind";
private MediaRecorder recorder = null;
private int currentFormat = 0;
private int output_format = MediaRecorder.OutputFormat.THREE_GPP;
private String file_ext = AUDIO_RECORDER_FILE_EXT;

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

   final CountDownTimer t;


    t = new CountDownTimer( Long.MAX_VALUE , 1000) {

        int cnt=0;

        @Override
        public void onTick(long millisUntilFinished) {

            cnt++;
            long millis = cnt;
            int seconds = (int) (millis / 60);

            setTime(cnt);
            Log.d("Count:", ""+cnt);
        }

        @Override
        public void onFinish() {

        }
    };

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    final Snackbar snackbar = Snackbar.make(findViewById(R.id.root_layout), getTime(), Snackbar.LENGTH_INDEFINITE);

    final FloatingActionButton fabAdd = (FloatingActionButton) findViewById(R.id.fabAdd);
    final FloatingActionButton fabStop = (FloatingActionButton) findViewById(R.id.fabStop);

    fabAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            t.start();
            fabAdd.setVisibility(View.GONE);
            fabStop.setVisibility(View.VISIBLE);
            snackbar.show();
            snackbar.setAction("CANCEL", new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    snackbar.dismiss();
                    fabAdd.setVisibility(View.VISIBLE);
                    fabStop.setVisibility(View.GONE);
                }
            });

        }
    });

    fabStop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            t.cancel();
            snackbar.dismiss();
            fabStop.setVisibility(View.GONE);
            fabAdd.setVisibility(View.VISIBLE);
        }
    });




}




private String display;

public void setTime(int rawCount) {

    int rc = rawCount;

    int minutes = (rc - (rc % 60)) / 60;
    int seconds = (rc % 60);

    String mins = String.format(Locale.ENGLISH, "%02d", minutes);
    String secs = String.format(Locale.ENGLISH, "%02d", seconds);
    display = mins+ ":" +secs;

    Log.d("CountTwo:",display);
    getTime();

}

public String getTime() {

    Log.d("Count getTime:", display);
    return display;
}

你收到这个消息了吗

java.lang.NullPointerException:println需要一条消息

如果是,则是因为您试图记录如下的空消息:

Log.d("Count getTime:", display);
必须初始化display变量才能在第一次运行时获得值

private String display = "";

我查看了一下,问题是Snackbar无法访问字符串
显示
,而且Snackbar测试无法动态更新,所以我做了这两项工作,并在这里和那里做了一些更改,下面是我的代码:

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

       final CountDownTimer t;


        t = new CountDownTimer( Long.MAX_VALUE , 1000) {

            int cnt=0;

            @Override
            public void onTick(long millisUntilFinished) {

                cnt++;
                long millis = cnt;
                int seconds = (int) (millis / 60);

                setTime(cnt);
                Log.d("Count:", ""+cnt);
            }

            @Override
            public void onFinish() {
                cnt = 0;
            }

        };

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        snackbar = Snackbar.make(findViewById(R.id.root_layout), "", Snackbar.LENGTH_INDEFINITE);

        final FloatingActionButton fabAdd = (FloatingActionButton) findViewById(R.id.fabAdd);
        final FloatingActionButton fabStop = (FloatingActionButton) findViewById(R.id.fabStop);

        fabAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                t.start();
                fabAdd.setVisibility(View.GONE);
                fabStop.setVisibility(View.VISIBLE);
                snackbar.show();
                snackbar.setAction("CANCEL", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        t.cancel();
                        t.onFinish();
//                        setTime(0);
                        snackbar.dismiss();
                        fabAdd.setVisibility(View.VISIBLE);
                        fabStop.setVisibility(View.GONE);
                    }
                });

            }
        });

        fabStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                t.cancel();
                t.onFinish();
//                setTime(0);
                snackbar.dismiss();
                fabStop.setVisibility(View.GONE);
                fabAdd.setVisibility(View.VISIBLE);
            }
        });




    }


    /*
        public void Duration() {
        *//*        Timer timer = new Timer();

            TimerTask timerTask = new TimerTask() {
                @Override
                public void run() {

                    runOnUiThread(new Runnable() {
                        int count;

                        @Override
                        public void run() {
                            setTime(count);
                            count++;
                            Log.d("Count:", ""+count);
                        }
                    });
                }
            };*//* //Old code removed on 22Apr17@11:41PM


        }*/ //Old code Duration method

     String display="";

    public void setTime(int rawCount) {

//        int rc = rawCount;

        int minutes = (rawCount - (rawCount % 60)) / 60;
        int seconds = (rawCount % 60);

        String mins = String.format(Locale.ENGLISH, "%02d", minutes);
        String secs = String.format(Locale.ENGLISH, "%02d", seconds);
        display = mins+ ":" +secs;

        Log.d("CountTwo:",display);
        snackbar.setText(display);

    }

    /*public String getTime() {

        Log.d("Count getTime:", display);
        return display;
    }*/

是的,但是那样做不能解决我的问题。我可以做到,但它仍然没有给snackbar显示任何东西