java.lang.runtimeException:无法通过广播界内类实例化接收器



我已经阅读了有关此问题的先前线程,但是答案无法解决我的问题。我有一个broadcastreceiver,它是一个内部阶级的内部阶级,在以下例外失败:

没有空的构造函数 at android.app.activitythread.handlereceiver(activityThread.java:2410) at Android.app.ActivityThread.Access $ 1700(ActivityThread.java:142) at android.app.ActivityThread $ H.Handlemessage(activityThread.java:1279) at android.os.handler.dispatchmessage(Handler.java:102) at android.os.looper.loop(looper.java:136) at android.app.activitythread.main(activityThread.java:5118) 在java.lang.reflect.method.invokenative(本机方法) 在java.lang.reflect.method.invoke(method.java:515) 在com.android.internal.os.os.zygoteinit $ methodAndargScaller.run(zygoteinit.java:794) 在com.android.internal.os.os.zygoteinit.main(zygoteinit.java:610) 在dalvik.system.nativestart.main(本机方法)上 引起的:java.lang.instantiationException:无法实例化com.tac.kulik.kulik.dealsgrabber.mainactivity $ databaseBroadcastreceiver;没有空的构造函数 在java.lang.class.newinstanceimpl(本机方法) 在java.lang.class.newinstance(class.java:1214) at android.app.activitythread.handlereceiver(activityThread.java:2405) at Android.app.ActivityThread.Access $ 1700(ActivityThread.java:142) at android.app.ActivityThread $ H.Handlemessage(activityThread.java:1279) at android.os.handler.dispatchmessage(Handler.java:102) at android.os.looper.loop(looper.java:136) at android.app.activitythread.main(activityThread.java:5118) 在java.lang.reflect.method.invokenative(本机方法) 在java.lang.reflect.method.invoke(method.java:515) 在com.android.internal.os.os.zygoteinit $ methodAndargScaller.run(zygoteinit.java:794) 在com.android.internal.os.os.zygoteinit.main(zygoteinit.java:610) 在dalvik.system.nativestart.main(本机方法)

使BroadcastreCeiver静态不是一个选项,因为我将无法访问我需要使用的必要成员变量。

这是broadcastreceiver内部类别的主动脉:

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    .
    .
    .
    .
    .
    try {
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent dbIntent = new Intent(MainActivity.this, DatabaseBroadcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, dbIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmManager.INTERVAL_DAY, pendingIntent);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
public class DatabaseBroadcastReceiver extends BroadcastReceiver {
    public DatabaseBroadcastReceiver() {
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        final Context mContext = context;
        .
        .
        .
        .
        .
            @Override
            public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
                Log.d(TAG, "onLoadFinished s=" + cursor.getCount());
                mDealsAdapter.swapCursor(cursor);
            }
            @Override
            public void onLoaderReset(Loader<Cursor> arg0) {
                Log.d(TAG, "onLoaderReset");
                mDealsAdapter.swapCursor(null);
            }
        };
        getSupportLoaderManager().initLoader(0, new Bundle(), mCallback);
    }
};

androidmanifest.xml

<receiver android:name=".MainActivity$DatabaseBroadcastReceiver"/>

请告知任何人。

使BroadcastreCeiver静态不是一个选项,因为我将无法访问我需要使用的必要成员变量。

那是您应用程序中的错误,您需要修复该错误。

您的整个过程,更不用说活动了,当警报响起时不存在。您的BroadcastReceiver需要能够完全独立于活动。通常,这样的接收器被用作顶级public Java类,以帮助执行这种独立性。

最新更新