2017-04-22 89 views
2

我正在嘗試在我的Snackbar中設置一個計時器,我已嘗試過此操作並獲得了計時器以工作,但不在getTime()方法中,我認爲這可能是這種情況,沒有工作。無法在Snackbar中設置計時器

如果這個問題太糟糕,我很抱歉,我只把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; 
} 

回答

0

我看着它,問題是,字符串display無法訪問到小吃吧,也是小吃吧測試無法更新動態,所以我做了這兩個的在這裏和那裏和這裏是做了一些改動我的代碼:

@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 [email protected]: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; 
    }*/ 
2

您是否收到此消息?

顯示java.lang.NullPointerException:需要的println消息

如果是的話那是因爲你嘗試登錄這樣的空消息:

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

你必須初始化顯示變量具有第一次運行的值。

private String display = ""; 
+0

是的,但這樣做並不能解決我的問題。我可以做到這一點,但它仍然沒有給小吃店任何東西顯示 – 4127157