我有一个广播接收器如下
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
*/
}
再上一个类
Test2.java
public class Test2 {
private Interfacetest InterfacetestCommander;
public interface Interfacetest {
void interfaceTestMethod();
}
public Test2(Context context) {
InterfacetestCommander = (Interfacetest) context;
InterfacetestCommander.interfaceTestMethod();
}
/*
Remaining code
*/
}
当我尝试使用广播接收器上下文初始化接口(interface)时,出现以下错误
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
我需要知道可以使用广播接收器上下文初始化接口(interface)吗?如果是,请告诉我怎么做?
N.B :我的真实代码有点长。所以我只是在这里展示了一些简单的类和方法名称的相关代码。
最佳答案
你不应该使用
test2 = new Test2(context);
因为context是Context
的一个实例,但是Context
没有实现你的接口(interface),你的Test1类实现了这个接口(interface),所以你可以为你的Test2添加一个参数像这样上课:
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);
关于java - 无法在 Android 中使用 BroadcastReceiver 上下文初始化接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35010341/