相关疑难解决方法(0)

Android"java.lang.RuntimeException:Parcelable visitedClassNotFoundException读取Serializable对象"

我有一个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)

java enums android android-intent classnotfoundexception

12
推荐指数
2
解决办法
6246
查看次数

使用广播接收器在应用程序之间发送可序列化对象

我试图通过广播接收器将一个实现“可序列化”的对象从一个应用程序发送到另一个应用程序。

我想发送一个类,如:

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)

java android

3
推荐指数
1
解决办法
1325
查看次数