【问题标题】:instantiate inner broadcast receiver class实例化内部广播接收器类
【发布时间】:2012-02-09 00:12:03
【问题描述】:

我刚刚将我的外部广播接收器类更改为我的服务,因为..一些 android 方法无法在静态上下文中使用。现在我收到一个错误无法实例化活动 ComponentInfo{com...}: java.lang.NullPointerException。怎么可能修复?下面是我的嵌套 BroadcastReceiver 类的代码。

public class ServiceX extends Service {

private SharedPreferences settings = getSharedPreferences(PREFS, 0);
private SharedPreferences.Editor editor = settings.edit();

private static void setEnableNotification(int command) {
    if (command == 1)
        enableNotification = true;
    else
        enableNotification = false;

    editor.putBoolean("enableNotification", enableNotification);
      editor.commit();
}

public static class ReceiverX extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
            int enableNotification = intent.getIntExtra("EnableNotification", 0);

            if (enableNotification == 0)
                context.
                setEnableNotification(0);
            else if (enableNotification == 1)
                setEnableNotification(1);

}

}

下面是我如何实例化内部类:

public class ActivityX extends Activity{

private BroadcastReceiver receiver = security365Service.new NotifyServiceReceiver();

以下是我在网上查看一些资源后更改的主要内容:

    <receiver android:name="com.milanix.services.ServiceX$ReceiverX" android:enabled="true">
    </receiver>

对不起,如果我的问题很愚蠢。

【问题讨论】:

    标签: android broadcastreceiver nested-class


    【解决方案1】:

    你不能在这里使用常规的内部类。它需要是一个static 内部类,这会让你回到原来的问题。因此,您需要以一种或另一种方式解决“某些 android 方法无法在静态上下文中使用”的问题。

    【讨论】:

    • 但我有一个共享首选项。并且广播接收器修改提交共享首选项的方法。我该如何解决?无法从 ContextWrapper 类型对非静态方法 getSharedPreferences(String, int) 进行静态引用
    • @Milanix:使用提供给onReceive()Context 访问您的SharedPreferences。或者,让BroadcastReceiver 通过startService() 将控制权传递给IntentService,并让它更新SharedPreferences
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多