我有一个Android应用程序,我在其中添加了一个枚举:
public enum RootNavigationOption {
HOME(R.string.home, R.drawable.ic_home), SETTINGS(R.string.settings, R.drawable.ic_settings), LOGOUT(
R.string.logout_label, R.drawable.ic_logout);
private int navigationOptionLabelResId;
private int navigationOptionImageResId;
private RootNavigationOption(int navigationOptionLabelResId, int navigationOptionImageResId) {
this.navigationOptionLabelResId = navigationOptionLabelResId;
this.navigationOptionImageResId = navigationOptionImageResId;
}
public int getNavigationOptionLabelResId() {
return navigationOptionLabelResId;
}
public int getNavigationOptionImageResId() {
return navigationOptionImageResId;
}
public static int getValuePosition(RootNavigationOption filterOption) {
int idx = 0;
for (RootNavigationOption navigationOptionIter : values()) {
if (navigationOptionIter.equals(filterOption)) {
return idx;
}
idx++;
}
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我把这个枚举放在了几个意图包中,以便与我的主要活动进行交流.我的enum解决方案中已经有一个这样的,这不会导致任何问题.但是,当我使用这个新enum的定义运行我的应用程序时,它会立即崩溃:
java.lang.RuntimeException: Parcelable …Run Code Online (Sandbox Code Playgroud) 我试图通过广播接收器将一个实现“可序列化”的对象从一个应用程序发送到另一个应用程序。
我想发送一个类,如:
public class MyObject implements Serializable{
//basic properties
}
Run Code Online (Sandbox Code Playgroud)
在应用程序 A 中,我这样做:
Intent i = new Intent("myApplication.string");
Bundle b = new Bundle();
b.putSerializable("myclass",obj);
i.putExtras(b);
sendBroadcast(i);
Run Code Online (Sandbox Code Playgroud)
当我调试这个时,我可以验证对象是否正确存储在意图中的包中。
在应用程序 B 中,我这样做:
显现
<receiver
android:name="com.example.myapplication.myreceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="myApplication.string"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
广播接收器
@Override
public void onReceive(Context context, Intent intent) {
try{
Bundle b = intent.getExtras();
MyObject s = (MyObject)b.getSerializable("myclass");
}catch (Exception e){
Log.d(TAG,e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
在应用程序 B 中,意图不保存它在应用程序 A 中所做的数据。
当我尝试投射数据时,它会抛出:
Parcelable encountered ClassNotFoundException reading a Serializable object (name = com.example.myApplication.MyObject) …Run Code Online (Sandbox Code Playgroud)