Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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 从倒计时返回值_Java_Android_Return_Countdowntimer - Fatal编程技术网

Java 从倒计时返回值

Java 从倒计时返回值,java,android,return,countdowntimer,Java,Android,Return,Countdowntimer,我需要从倒计时中返回值,以便更新textView。我不知道如何才能做到这一点,我已经添加了一条评论,其中我尝试添加回报,但没有运气 public class BrewTimer extends Activity{ public String secsRemain = "not set"; @Override protected void onCreate(Bundle savedInstanceState) { supe

我需要从倒计时中返回值,以便更新textView。我不知道如何才能做到这一点,我已经添加了一条评论,其中我尝试添加回报,但没有运气

public class BrewTimer extends Activity{

        public String secsRemain = "not set";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            System.out.println("Timer Created, we're in the onCreate Method.");
        }

        public void startBrewTimer(long remaningMillis) {
            // Start the Brew Timer
            System.out.println("Timer object fired!");

            new CountDownTimer(remaningMillis, 1000) {

                public void onTick(long millisUntilFinished) {
                    secsRemain = "seconds remaining: " + millisUntilFinished / 1000;
                    System.out.println(secsRemain);

                    return secsRemain; // <-- This is what I want to do
                }

                public void onFinish() {
                    System.out.println("Timer Finished!!!");
                }
            }.start();
        }

        public void stopBrewTimer() {
            //Stop the Brew Timer
        }

        }
公共类BrewTimer扩展活动{
公共字符串secsRemain=“未设置”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
println(“计时器已创建,我们在onCreate方法中。”);
}
公共无效启动计时器(长剩余毫秒){
//启动Brew计时器
System.out.println(“计时器对象已触发!”);
新的倒计时器(剩余毫秒,1000){
公共void onTick(长毫秒未完成){
secsRemain=“剩余秒数:”+millisuntillfinished/1000;
System.out.println(secsRemain);
返回secsRemain;//
我需要从倒计时返回值,以便更新
文本视图

不需要这样做。它在ui线程上运行。您可以在
onTick
本身中更新textview

例如:

public class MainActivity extends Activity { 
TextView tv;
  public String secsRemain = "not set";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv = (TextView) findViewById(R.id.textView1);
    startBrewTimer(200000);     
}
private void startBrewTimer(long remaningMillis){
    CountDownTimer counter = CountDownTimer(remaningMillis, 1000){
        public void onTick(long millisUntilDone){
        secsRemain = "seconds remaining: " + millisUntilFinished / 1000; 
          tv.setText(secsRemain);                    
        }

        public void onFinish() {
            tv.setText("DONE!");

        }
    }.start();
}
 }

您可以通过广播接收器获取值……如下所示, 首先创建自己的
IntentFilter
as

    Intent intentFilter=new IntentFilter();
    intentFilter.addAction("YOUR_INTENT_FILTER");
然后创建内部类
BroadcastReceiver
as

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    /** Receives the broadcast that has been fired */
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction()=="YOUR_INTENT_FILTER"){
           //HERE YOU WILL GET VALUES FROM BROADCAST THROUGH INTENT EDIT YOUR TEXTVIEW///////////
           String receivedValue=intent.getStringExtra("KEY");
        }
    }
};
registerReceiver(broadcastReceiver, intentFilter);
unregisterReceiver(broadcastReceiver);
现在在
onResume()
中将广播接收器注册为

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    /** Receives the broadcast that has been fired */
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction()=="YOUR_INTENT_FILTER"){
           //HERE YOU WILL GET VALUES FROM BROADCAST THROUGH INTENT EDIT YOUR TEXTVIEW///////////
           String receivedValue=intent.getStringExtra("KEY");
        }
    }
};
registerReceiver(broadcastReceiver, intentFilter);
unregisterReceiver(broadcastReceiver);
最后在
ondestory()
as中注销
BroadcastReceiver

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    /** Receives the broadcast that has been fired */
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction()=="YOUR_INTENT_FILTER"){
           //HERE YOU WILL GET VALUES FROM BROADCAST THROUGH INTENT EDIT YOUR TEXTVIEW///////////
           String receivedValue=intent.getStringExtra("KEY");
        }
    }
};
registerReceiver(broadcastReceiver, intentFilter);
unregisterReceiver(broadcastReceiver);
现在最重要的部分…你需要从任何你需要发送值的地方发射广播…也可以这样做

Intent i=new Intent();
i.setAction("YOUR_INTENT_FILTER");
i.putExtra("KEY", "YOUR_VALUE");
sendBroadcast(i);

如果您觉得满意,请不要忘记接受我的回答……干杯:)

因为返回类型是
void
public void onTick(long millisuntilfilled){
你不能
返回
任何东西。但是请看Raghundan的答案。谢谢你,我把计时器放在它自己的类中,认为我可以创建一个对象以及它的各种方法。你所描述的倒计时计时器的典型使用方式是什么?我可以将倒计时计时器代码放在活动中并使用代码您已经提供了,而且它可以工作,但是您认为将其作为对象或单例会更好,以获得更多的多功能性吗?@Mint\u Sauce上述方法可以工作。您不需要单例来实现这一点。