我有这个应用程序:
public class App extends Application {
    private AppInterface appInterface;
    @Override
    public void onCreate() {
        super.onCreate();
        appInterface = (AppInterface) this;
    }
    public void something() {
        appInterface.result();
    }
}
使用这个接口:
public interface AppInterface {
    void result();
}
我试图在应用程序内部调用一些方法并从接口获取结果:
public class MainActivity extends AppCompatActivity implements AppInterface {
    @Override
    public void result() {
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final App app = (App) getApplication();
        app.something();
    }
}
但我收到此错误:
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.something, PID: 13803 java.lang.RuntimeException: Unable to create application com.something.App: java.lang.ClassCastException: com.something.App cannot be cast to com. something.AppInterface at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5406) at android.app.ActivityThread.-wrap2(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545) at安卓系统。Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 引起:java.lang .ClassCastException: com.msd.test.App 不能转换为 com.msd.test.AppInterfacedispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native) Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 引起:java.lang.ClassCastException : com.msd.test.App 不能转换为 com.msd.test.AppInterfacedispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native) Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 引起:java.lang.ClassCastException : com.msd.test.App 不能转换为 com.msd.test.AppInterface102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android .internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 由:java.lang.ClassCastException: com.msd.test .App 不能转换为 com.msd.test.AppInterface102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android .internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 由:java.lang.ClassCastException: com.msd.test .App 不能转换为 com.msd.test.AppInterfaceos.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os。 ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 由:java.lang.ClassCastException:com.msd.test.App 无法转换到 com.msd.test.AppInterfaceos.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os。 ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 由:java.lang.ClassCastException:com.msd.test.App 无法转换到 com.msd.test.AppInterfacemain(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal。 os.ZygoteInit.main(ZygoteInit.java:776) 导致:java.lang.ClassCastException: com.msd.test.App 无法转换为 com.msd.test.AppInterfacemain(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal。 os.ZygoteInit.main(ZygoteInit.java:776) 导致:java.lang.ClassCastException: com.msd.test.App 无法转换为 com.msd.test.AppInterface在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 处运行(ZygoteInit.java:886) 由:java.lang.ClassCastException:com.msd.test.App 无法转换为 com.msd .test.AppInterface在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 处运行(ZygoteInit.java:886) 由:java.lang.ClassCastException:com.msd.test.App 无法转换为 com.msd .test.AppInterface
我做错了什么?
小智 5
尝试界面如下:
在 App.java 中:
    public class App extends Application {
        private AppInterface appInterface;
        @Override
        public void onCreate() {
            super.onCreate();
        }
        public void something(AppInterface appInterface) {
            this.appInterface = appInterface;
//save this for future use, and whenver you want to pass data , use this method like-
        appInterface.result();
    }
}
在 MainActivity.java 中
public class MainActivity extends AppCompatActivity implements AppInterface {
    @Override
    public void result() {
      Log.d("result", "called");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final App app = (App) getApplication();
        // pass you reference from here
        app.something(MainActivity.this);
    }
}
| 归档时间: | 
 | 
| 查看次数: | 1487 次 | 
| 最近记录: |