2013-01-19 71 views
0

昨天我问了一个类似这样的问题,但已经改变了我的代码,并且现在有一个不同的问题。报警管理器无法触发

我有一个切换按钮,设置报警经理挂起的意图5秒后,应能触发。我有一次性的设置,所以我希望消息出现一次(后面我会实现这个日期值)。

我没有得到这个代码的错误,但我似乎不能触发我的意图,然后显示我的吐司消息。

下面是我所定义的“DateAlarm”类中的XML活动:

 <activity 
     android:name=".DateAlarm" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="com.example.flybase2.DateAlarm" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

我的继承人我的切换按钮的onClick方法为我与报警经理切换按钮:

case (R.id.toggleButton1): 

    Integer dobMonth = setDate.getMonth(); 
    Integer dobYear = setDate.getYear(); 
    Integer dobDate = setDate.getDayOfMonth(); 

    Date set; 
    set = new Date(dobYear - 1900, dobMonth, dobDate); 


    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, DateAlarm.class); 
    PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
    am.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + (5 * 1000), pendingIntent); 


    break; 

和我最后的'DateAlarm'类持有意图的行动。

package com.example.flybase2; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.widget.Toast; 

public class DateAlarm extends Activity { 

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

    Toast.makeText(context, "Appointment is today", Toast.LENGTH_LONG).show(); 
} 

}

+0

尝试改变PendingIntent.getService到PendingIntent.getActivity –

+0

@ A - Ç感谢那似乎开始了这个意图。现在只有问题当在DateAlarm类上打开类时,即时获取Null指针异常。 – user1352057

+0

您尚未初始化上下文。在onCreate()做'context = this;' –

回答

0

你有两个问题:

  1. 您正在使用PendingIntent.getService()代替PendingIntent.getActivity()由于DateAlarm扩展Activity,你要PendingIntent.getActivity()

  2. DateAlarm您的上下文变量为空。在onCreate()你应该初始化它。另请注意,由于Activity延伸了Context,因此不需要此变量。但是,如果你想使用该变量做:


super.onCreate(savedInstanceState); 
context = this; 

Context context = this; //right from the global declaration 
+0

非常感谢A - C。作为一个新兴的Java程序员,有时候上下文让我感到困惑。所以我在字面上将类的上下文(即'this')设置为上下文变量?它是否正确? – user1352057

+0

不,你没有把类的上下文设置为'this'。 'Activity'扩展了'Context',所以'Activity'就是'Context'。你所要做的就是设置你的引用变量(这是一个相当冗余的变量)来指向当前的DateAlarm实例。看看[继承](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)和'this' [关键字](http://docs.oracle.com/javase /tutorial/java/javaOO/thiskey.html) –

+0

再次非常感谢您的时间。这确实有道理。我意识到我的班级正在扩展超级班活动,并且我也看到了你的意思是多余的。最后一个问题如果我可以在阅读完你写的内容之后,基本上将超类的上下文设置为dateAlarm的上下文,即如你所说的那样引用它?对于Oracle文章也是ty。 – user1352057