2012-07-15 81 views
-1

因此,我一直在整个这个项目上工作,因为我想了解timePicker并处理java和android sdk中的时间。所以现在我有以下设置:我无法让我的线程或循环运行正常

package com.dicamillo.alarm; 

import java.util.Calendar; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.DigitalClock; 
import android.widget.TextView; 
import android.widget.TimePicker; 

public class AlarmlockActivity extends Activity implements OnClickListener { 
    /** Called when the activity is first created. */ 
    TimePicker tp; 
    Button set; 
    int hour; 
    int minuet; 
    DigitalClock dc; 
    Calendar calendar = Calendar.getInstance(); 
    TextView complete; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     tp = (TimePicker) findViewById(R.id.tpAlarmTime); 
     set = (Button) findViewById(R.id.bSet); 
     dc = (DigitalClock) findViewById(R.id.digitalClock1); 
     hour = calendar.get(Calendar.HOUR); 
     minuet = calendar.get(Calendar.MINUTE); 
     complete = (TextView) findViewById(R.id.tvTest); 
     set.setOnClickListener(this); 

    } 

public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch (v.getId()) { 
     case R.id.bSet: 

      Thread alarmstart = new Thread() { 
       public void run() { 
        while (tp.getCurrentHour().intValue() != hour 
          && tp.getCurrentMinute().intValue() != minuet) { 
         tp.getCurrentHour().intValue(); 
         tp.getCurrentMinute().intValue(); 
         if (tp.getCurrentHour().intValue() == hour 
           && tp.getCurrentMinute().intValue() == minuet) { 
          MediaPlayer mp = MediaPlayer.create(
            AlarmlockActivity.this, R.raw.alarm); 
          mp.start(); 
          complete.setText("COmpleted!"); 

         } 
        } 
       } 
      }; 
      alarmstart.start(); 
      break; 
     } 
    } 

,并在选定的时间达到当前的时间什么也没有发生像它应该应该。我在线索中遗漏了什么?或者我完全错了。任何帮助工作都很棒。我知道我今天一直在寻求很多帮助,但我只想学习。 =)

+1

人们不想盯着50行代码。尽可能减少它。 – Bananeweizen 2012-07-15 05:09:49

回答

2

我注意到你的代码有几处错误。

1)不需要单独的线程。

2)不需要一个while循环,因为如果设置小时和分钟不等于当前时间,那么你进入了一个无限循环。

3)您根本没有使用DigitalClock。为什么那里的变量?

4)即使你进入while循环,你在呼唤

tp.getCurrentHour().intValue(); 
tp.getCurrentMinute().intValue(); 
所以他们没有任何用处未分配给任何变量

。 5)你在if语句中的条件将永远不会被满足,因为如果它满足的话,你不会在while循环中。

6)不需要开关箱,因为你只有一个按钮。

7)最后,你需要在你的onClick方法唯一的一点是:

tp.clearFocus();// allows reading the value set if entered by keyboard 

if (tp.getCurrentHour().intValue() == hour && tp.getCurrentMinute().intValue() == minuet) { 
     MediaPlayer mp = MediaPlayer.create(AlarmlockActivity.this, R.raw.alarm); 
     mp.start(); 
     complete.setText("COmpleted!"); 

}

我希望你也意识到小时和分钟,当您正在启动这个应用程序是因为如果你不知道启动它的时间,那么你将很难在时间选择器中匹配时间。

编辑:hour = calendar.get(Calendar.HOUR);将以12小时格式返回您的时间。如果您的TimePicker设置为24小时格式,那么在下午时间启动应用程序时,它不起作用。您应该使用日历的HOUR_OF_DAY字段。

您还可以将小时和分钟变量打印到textView中,以确保它们的值或使用调试程序将它们与您从TimePicker中的getCurrentXXX()方法获得的内容进行比较,因为您希望在TimePicker中与它们匹配。

+0

我做了更正,没有做任何事情,并添加@Override给我一个错误,因为onClick方法不是一个超类,并且如果我忽略它,就像以前一样。 – user1502224 2012-07-15 15:19:50

+0

好吧,不需要覆盖然后。请参阅我的编辑和7)的一点更新。 – Erol 2012-07-15 17:24:06