我正在编写一个 Android 应用程序,它有两种不同的后台服务,一种用于发送和接收来自服务器的请求,另一种用于从 url 下载图像。应用程序的多个页面需要执行这些 Activity ,因此我编写了两个接口(interface),用于处理服务器请求的RequestReceiver和用于下载图像的ImageReceiver。
为了在 Android 中接收广播 Intent ,我扩展了 BroadcastReceiver 类并重写其 onReceive() 方法。这应该通过 Intent 中的内部类来完成,该内部类调用实现它的类中的方法。但是,我无法从静态内部类调用非静态方法。
public interface RequestReceiver {
void handleRequest(int status, JSONObject object);
class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra("STATUS", -1);
try {
JSONObject object = new JSONObject(intent.getStringExtra("DATA"));
handleRequest(status, object);
} catch (JSONException e) {
Log.e(this.toString(), "JSONException");
e.printStackTrace();
}
}
}
}
这不能编译:
non-static method cannot be referenced from a static context
我应该采取什么不同的做法?
编辑: 我不能使用抽象类的原因是我需要多重继承。有些 Activity 需要是 ImageDownloader 而不是 RequestReceivers,反之亦然。此外,实现此接口(interface)的类已经从其他类继承。有些是扩展 Fragment,有些是扩展 Activity,但它们都需要访问这些功能。因此,它一定是一个接口(interface)。
最佳答案
您可以将包含非静态方法的外部类的对象传递到静态内部类中。这可以通过构造函数或设置方法来完成。传入的对象应该分配给静态内部类的成员变量。
然后,您可以使用传递到静态内部类构造函数或 setter 的外部类对象来调用非静态方法。
关于具有默认内部类的 Java 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29332484/