Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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 - Fatal编程技术网

Java 将活动从活动传递到广播接收器

Java 将活动从活动传递到广播接收器,java,android,Java,Android,我需要将活动实例传递给调用停止AlarmManager的方法 主要活动 private void setAlarm(long timeInMilis) { alarmManager = (AlarmManager) getSystemService((Context.ALARM_SERVICE)); MyAlarm myAlarm = new MyAlarm(this); Intent intent = new Intent(this, myAlarm.getCl

我需要将活动实例传递给调用停止AlarmManager的方法

主要活动

    private void setAlarm(long timeInMilis) {
    alarmManager = (AlarmManager) getSystemService((Context.ALARM_SERVICE));
    MyAlarm myAlarm = new MyAlarm(this);
    Intent intent = new Intent(this, myAlarm.getClass());
    pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    alarmManager.setRepeating(AlarmManager.RTC, timeInMilis, 10000, pendingIntent);
    if (dbHelper.getProfile().getHp() >= 100) {
        stopAlarmManager();
        Toast.makeText(this, "Your character is fully healed.", Toast.LENGTH_LONG).show();
    }
}

public void stopAlarmManager() {
    if (alarmManager != null)
        alarmManager.cancel(pendingIntent);
}
还有我的收音机

public class MyAlarm extends BroadcastReceiver {

MainActivity mainActivity;

public MyAlarm() {
}

public MyAlarm(MainActivity mainActivity) {
    this.mainActivity = mainActivity;
}

@Override
public void onReceive(Context context, Intent intent) {
    DBHelper dbHelper = new DBHelper(context);
    dbHelper.getWritableDatabase();


    dbHelper.setHp("1", dbHelper.getProfile().getHp() + 40);
    String currentHp = String.valueOf(dbHelper.getProfile().getHp());
    if (Integer.parseInt(currentHp) < dbHelper.getProfile().getHpMax())
        Toast.makeText(context, "Your character gain 40HP and now has: " + currentHp + "HP", Toast.LENGTH_LONG).show();
    else {
        Toast.makeText(context, "Your character is fully healed", Toast.LENGTH_LONG).show();
        mainActivity.stopAlarmManager();
    }
}
}
公共类MyAlarm扩展广播接收器{
主要活动主要活动;
公共警报(){
}
公共MyAlarm(主活动主活动){
this.mainActivity=mainActivity;
}
@凌驾
公共void onReceive(上下文、意图){
DBHelper DBHelper=新的DBHelper(上下文);
dbHelper.getWritableDatabase();
setHp(“1”,dbHelper.getProfile().getHp()+40);
String currentHp=String.valueOf(dbHelper.getProfile().getHp());
if(Integer.parseInt(currentp)

但这段代码会导致错误:由空对象引用上的:java.lang.InstantiationException:java.lang.Class引起。

使用哪种方法创建MyAlarm实例?您在哪一行收到错误消息?如果我没有添加任何参数构造函数,那么我在mainActivity.stopAlarmManager()处会收到一个错误;由于空对象引用,您可以显示stopAlarmManager方法代码。好的,我添加了“我需要传递活动实例来调用停止AlarmManager的方法。”–不,您不需要。您只需要一个
上下文
就可以获得
报警管理器
,以及相同的
挂起内容
。一个
上下文
被传递到接收方的
onReceive()
方法中,只需像设置报警时一样构造它,就可以创建相同的
pendingent