具有默认内部类的 Java 接口(interface)

标签 java android

我正在编写一个 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/

相关文章:

java - 将现有 REST API 部署到用 Java 编写的 AWS lambda

java - 处理 16 位字符的 I/O

android - 如何以编程方式重命名 SD 卡中的音频文件?

java - System.identityHashCode() 和 hashCode() 方法的内部工作原理是什么?

java - java中的UTF-8编码,从网站检索数据

android - 哪个是 AOSP 中正确的图库应用程序?

java - 我想删除 NavigationView 布局上的栏

android - 请帮助非常简单的 android 小部件按钮单击。变得非常沮丧。 :(

android - 用于跨平台应用程序开发或 JQUERY 移动的离线 HTML5 或 native SDK

java - Jackson 将未知属性名称反序列化为自定义实体