Derrick
Derrick

Reputation: 43

TimeUnit Cannot resolve symbol

I am trying to make a basic countdown timer. I'm going to be honest I got most of this through a tutorial so I don't fully understand the workings of it but I've been trying for hours to find an answer and I don't know where else to look.

I am getting a 'Cannot resolve symbol' at the bottom after TimeUnit. For example: MILLISECONDS, SECONDS, MINUTES.

package com.dukehatz.dev.bwexercise;

import android.os.CountDownTimer;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.w3c.dom.Text;

public class Dips extends ActionBarActivity {

  TextView CountdownTimer;
  Button TimeStart, TimeReset;

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

    TimeStart = (Button) findViewById(R.id.TimeStart);
    TimeReset = (Button) findViewById(R.id.TimeReset);
    CountdownTimer = (TextView) findViewById(R.id.CountdownTimer);

    CountdownTimer.setText("5:00.000");

    final CounterClass timer = new CounterClass(100000, 1000);
    TimeStart.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            timer.start();
          }
        });
  }

  public class CounterClass extends CountDownTimer {

    public CounterClass(long millisInFuture, long countDownInterval) {
      super(millisInFuture, countDownInterval);
    }

    @Override
    public void onTick(long millisUntilFinished) {
      long millis = millisUntilFinished;
      String hms = String.format("%02d:%02d:%02d"),
          TimeUnit.MILLISECONDS.toHours(millis),
          TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis),
          TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis);
      System.out.print(hms);
      CountdownTimer.setText(hms);
    }

    @Override
    public void onFinish() {
      CountdownTimer.setText("Complete!");
    }
  }
}

I am all for an easier more beginner way of doing this if it exists.

Thanks for any help

Upvotes: 4

Views: 19568

Answers (1)

kd8azz
kd8azz

Reputation: 623

You're missing an import. I'm not familiar with the libraries you are using, but they probably expect a java.util.concurrent.TimeUnit. If so, add import java.util.concurrent.TimeUnit; to your imports list.

EDIT-

Ah, yes. You also have several missing/misplaced parenthesis. Compare to this:

@Override
public void onTick(long millisUntilFinished) {
  long millis = millisUntilFinished;
  String hms = String.format("%02d:%02d:%02d",
      TimeUnit.MILLISECONDS.toHours(millis),
      TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
      TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
  System.out.print(hms);
  CountdownTimer.setText(hms);
}

The idea here is that the hours, minutes and seconds you are passing in are parameters to the String.format method. They correspond to the "%02d" phrases in the format string. All the parameters need to be in the ( )'s when you call the method.

Upvotes: 7

Related Questions