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」キーワードを使用できない理由をお読みください。

したがって、解決策は、parameteriseメソッドをContext使用してparamに送信し、それ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

この参照は、クラスの現在のオブジェクトを参照したい場合に使用されます。静的メソッドと変数は、クラスのメインとオブジェクトが作成される前にロードされます。この単語の使用を避けるか、メソッドを非静的にします。

于 2013-07-18T07:08:50.910 に答える
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 に答える