0
public static void createAlarms() {
    totaltimetaken = totaltimetaken + timetaken;
    totalcost = totalcost + costone; 
    cal = Calendar.getInstance();
    //cal.add(Calendar.HOUR, alarmintervalint);
    cal.add(Calendar.SECOND, alarmintervalint);
    calintent = new Intent(this, AlarmBroadcastReceiver.class);
    calpendingintent = PendingIntent.getBroadcast(this.getApplicationContext(), 12345, calintent, 0);
    am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, alarmintervalint, calpendingintent);
}

我已将此方法设为静态,因此我可以将其称为同一项目的另一个类。我在这些行上遇到错误:

calintent = new Intent(this, AlarmBroadcastReceiver.class);
    calpendingintent = PendingIntent.getBroadcast(this.getApplicationContext(), 12345, calintent, 0);
    am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);

1) 不能在静态上下文中使用 'this'
2) 不能从类型中对非静态方法 getSystemService(String) 进行静态引用

我将如何解决这些错误?非常感谢!

4

4 回答 4

2

阅读为什么我们不能在静态方法中使用“this”关键字

所以解决方案是使用参数化方法并发Context送到参数并使用它context代替this

作为

public static void yourMethod(Context mContext) {

calintent = new Intent(mContext, AlarmBroadcastReceiver.class);
    calpendingintent = PendingIntent.getBroadcast(mContext.getApplicationContext(), 12345, calintent, 0);
    am = (AlarmManager)mContext.getSystemService(Activity.ALARM_SERVICE);
}

所以你的方法应该是

public static void createAlarms(Context mContext) {
    totaltimetaken = totaltimetaken + timetaken;
    totalcost = totalcost + costone; 
    cal = Calendar.getInstance();
    //cal.add(Calendar.HOUR, alarmintervalint);
    cal.add(Calendar.SECOND, alarmintervalint);
    calintent = new Intent(mContext, AlarmBroadcastReceiver.class);
    calpendingintent = PendingIntent.getBroadcast(mContext.getApplicationContext(), 12345, calintent, 0);
    am = (AlarmManager)mContext.getSystemService(Activity.ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, alarmintervalint, calpendingintent);
}
于 2013-07-18T06:26:13.700 回答
0

由于您只能从静态方法访问静态成员,而 getSystemService 是非静态方法,因此您不能这样做。

选项 1:您可以删除 static 关键字,然后从对象调用您的方法

或者

选项2:您可以将getSystemService的代码移动到其他非静态方法。您可以从其他非静态方法调用它

于 2013-07-18T06:32:37.797 回答
0

简单地说,静态类没有this指针。您应该将其作为参数传递:

public static void createAlarms(final Context context) {
    ...
    calintent = new Intent(context, AlarmBroadcastReceiver.class);
}

然后你从活动中调用它:

createAlarms(this);

或来自片段;

YourActivity.createAlarms(getActivity());
于 2013-07-18T06:27:26.983 回答
0

当我们想要引用类的当前对象时使用此引用,静态方法和变量在类的主对象和对象之前加载,要么避免使用 this 词,要么使您的方法非静态

于 2013-07-18T07:08:50.910 回答