Luc*_* S. 4 java android exception broadcastreceiver instantiationexception
我有一个BroadcastReceiver的问题.如果我以这种方式在清单中声明操作:
<receiver android:name="com.app.activity.observer.DataEntryObserver" >
<intent-filter>
<action android:name= "@string/action_db_updated" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
我在strings.xml中的位置:
<string name="action_db_updated">com.app.DB_UPDATED</string>
Run Code Online (Sandbox Code Playgroud)
一切顺利.但是,如果我将其更改为:
<receiver android:name="com.app.activity.observer.DataEntryObserver" >
<intent-filter>
<action android:name= "com.app.DB_UPDATED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
我有这个例外,因为接收器被调用:
java.lang.RuntimeException:无法实例化接收器com.app.activity.observer.DataEntryObserver:java.lang.InstantiationException:无法实例化类com.app.activity.observer.DataEntryObserver; 没有空的构造函数
我会保留工作版本,但Play商店不允许我发布应用程序,因为它需要一个字符串值而不是变量@ string/..
我的接收器是一个外部类,定义为:
public class DataEntryObserver extends BroadcastReceiver{
private AppUsageLoader dLoader;
public DataEntryObserver(AppUsageLoader dLoader) {
this.dLoader = dLoader;
IntentFilter filter = new IntentFilter(
ReaLifeApplication.ACTION_DB_UPDATED);
dLoader.getContext().registerReceiver(this, filter);
}
@Override
public void onReceive(Context arg0, Intent arg1) {
// Tell the loader about the change.
dLoader.onContentChanged();
}
Run Code Online (Sandbox Code Playgroud)
}
130*_*3r5 10
使类成为静态类,否则它将被"视为"原始包含类实例的一部分.
从而:
public static class DataEntryObserver extends BroadcastReceiver{
public DeviceAdminSampleReceiver() {
super();
}
...
Run Code Online (Sandbox Code Playgroud)
你需要一个像这样的空构造函数:
public class DataEntryObserver extends BroadcastReceiver{
private AppUsageLoader dLoader;
// Empty constructor
public DataEntryObserver() { }
public DataEntryObserver(AppUsageLoader dLoader) {
this.dLoader = dLoader;
IntentFilter filter = new IntentFilter(
ReaLifeApplication.ACTION_DB_UPDATED);
dLoader.getContext().registerReceiver(this, filter);
}
@Override
public void onReceive(Context arg0, Intent arg1) {
// Tell the loader about the change.
dLoader.onContentChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我不确定保持非空构造函数是否会产生相同的错误.如果是,则必须将其删除.
归档时间: |
|
查看次数: |
10203 次 |
最近记录: |