无法使用 Android 中的 BroadcastReceiver 上下文初始化接口
Unable to initialise interface using BroadcastReceiver context in Android
我有一个广播接收器如下
Test1.java
public class Test1 extends BroadcastReceiver implements Test2.Interfacetest {
private Test2 test2;
@Override
public void onReceive(Context context, Intent intent) {
test2 = new Test2(context);
}
@Override
public void interfaceTestMethod() {
//code
}
/*
Remaining code
*/
}
还有一个class
Test2.java
public class Test2 {
private Interfacetest InterfacetestCommander;
public interface Interfacetest {
void interfaceTestMethod();
}
public Test2(Context context) {
InterfacetestCommander = (Interfacetest) context;
InterfacetestCommander.interfaceTestMethod();
}
/*
Remaining code
*/
}
当我尝试使用广播接收器上下文初始化接口时,出现以下错误
Process: in.ijasnahamed.interfaceTester, PID: 4452
java.lang.RuntimeException: Unable to start receiver in.ijasnahamed.interfaceTester.Test1: java.lang.ClassCastException: android.app.Application cannot be cast to in.ijasnahamed.interfaceTester.Test2$interfaceTestMethod
我想知道可以使用广播接收器上下文初始化接口吗?如果是,请告诉我怎么做?
N.B :我的真实代码有点长。所以我只是在这里展示了一些简单的 classes 和方法名称的相关代码。
你不应该使用
test2 = new Test2(context);
因为context是Context
的一个实例,但是Context
没有实现你的接口,你的Test1 class实现了这个接口,所以你可以为你的Test2添加一个参数class 像这样:
public Test2(Context context, Interfacetest interfacetest) {
this.mContext = context; //if you don't need the context,just ignore it
this.InterfacetestCommander = interfacetest
}
并更改
test2 = new Test2(context);
到
test2 = new Test2(context,this);
我有一个广播接收器如下
Test1.java
public class Test1 extends BroadcastReceiver implements Test2.Interfacetest {
private Test2 test2;
@Override
public void onReceive(Context context, Intent intent) {
test2 = new Test2(context);
}
@Override
public void interfaceTestMethod() {
//code
}
/*
Remaining code
*/
}
还有一个class
Test2.java
public class Test2 {
private Interfacetest InterfacetestCommander;
public interface Interfacetest {
void interfaceTestMethod();
}
public Test2(Context context) {
InterfacetestCommander = (Interfacetest) context;
InterfacetestCommander.interfaceTestMethod();
}
/*
Remaining code
*/
}
当我尝试使用广播接收器上下文初始化接口时,出现以下错误
Process: in.ijasnahamed.interfaceTester, PID: 4452
java.lang.RuntimeException: Unable to start receiver in.ijasnahamed.interfaceTester.Test1: java.lang.ClassCastException: android.app.Application cannot be cast to in.ijasnahamed.interfaceTester.Test2$interfaceTestMethod
我想知道可以使用广播接收器上下文初始化接口吗?如果是,请告诉我怎么做?
N.B :我的真实代码有点长。所以我只是在这里展示了一些简单的 classes 和方法名称的相关代码。
你不应该使用
test2 = new Test2(context);
因为context是Context
的一个实例,但是Context
没有实现你的接口,你的Test1 class实现了这个接口,所以你可以为你的Test2添加一个参数class 像这样:
public Test2(Context context, Interfacetest interfacetest) {
this.mContext = context; //if you don't need the context,just ignore it
this.InterfacetestCommander = interfacetest
}
并更改
test2 = new Test2(context);
到
test2 = new Test2(context,this);