【发布时间】:2018-03-29 21:52:42
【问题描述】:
我有一个 base 模块,在这个模块中我有一个接口:
interface BaseNavigationInterface : Serializable{
fun onItemClicked(navItemId: Int)
}
我有一个 market 模块,在这个模块中我有一个使用这个静态方法的活动:
companion object {
@JvmStatic
fun newIntent(context: Context, navInterface: BaseNavigationInterface) : Intent {
var intent = Intent(context, MarketActivity::class.java)
intent.putExtra("interface", navInterface)
return intent
}
}
在我的另一个模块(这是 app 模块)中,我想像这样启动 market 模块:
startActivity(MarketActivity.newIntent(this, navigationInterface));
navigationInterface 是我活动中的一个类变量:
private BaseNavigationInterface navigationInterface = (BaseNavigationInterface)(new BaseNavigationInterface() {
@Override
public void onItemClicked(int navItemId) {
}
});
我的问题是,当我的程序调用 startActivity() 方法并调用 MarketActivity.newIntent() 方法时,navigationInterface 参数的类型是 MainActivity。 为什么?
我遇到了这个异常:
java.lang.RuntimeException: Parcelable 遇到写入可序列化对象的 IOException (name = my.app.activities.MainActivity$9)
纯 kotlin 项目中的相同代码运行良好,但现在我有一个混合项目。 (app模块是java,oders是kotlin模块)
【问题讨论】:
-
我不确定让你的接口 BaseNavigationInterface 继承 Serializable 真的让它可序列化 cf。 doc : '只有当它扩展的类具有可访问的无参数构造函数来初始化类的状态时,子类型才能承担此责任。如果不是这种情况,则声明一个类 Serializable 是错误的。 developer.android.com/reference/java/io/Serializable.html