非静态方法不能从静态上下文中引用吗?

时间:2019-05-18 21:28:41

标签: java android sqlite broadcastreceiver alarmmanager

好,所以我遵循了一个教程并编写了以下代码:

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        NotificationHelper notificationHelper = new NotificationHelper(context);
        NotificationCompat.Builder nb = (NotificationCompat.Builder) NotificationHelper.getChannelNotification();
        NotificationHelper.getManager().notify(1, nb.build());
    }
}

getChannelNotification()用红色加下划线,并告诉我“不能从静态上下文中引用非静态方法'getChannelNotification()'”

我将方法设为静态,现在它通过不同的代码告诉我相同的消息:

public static NotificationCompat.Builder getChannelNotification() {
        return new NotificationCompat.Builder(getApplicationContext(), channelID)
                .setContentTitle("Alarm!")
                .setContentText("Your AlarmManager is working.")
                .setSmallIcon(R.drawable.alert);
    }

这次,getApplicationContext()代码用红色下划线标出,我得到了 “不能从静态上下文中引用非静态方法'getChannelNotification()'”。因此,要么我将代码设为静态,而getApplicationContext()变为红色下划线,要么我不使其变为静态,而

getChannelNotification()带红色下划线并带有相同的错误消息。

我关注的是YouTube教程,我对静态与非静态以及如何解决此代码一无所知。

代码的getManager()部分也发生了同样的事情。它显示了相同的错误,因此当我将代码更改为静态时,另一段代码现在会收到该错误。这个:

public static NotificationManager getManager() {
        if (mManager == null) {
            mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        }

        return mManager;
    }

我在上面添加了静态内容,现在getSystemService突出显示为红色,并显示错误“无法从静态上下文中引用非静态方法'getSystemService(java.lang.String)'”

0 个答案:

没有答案