由于错误-2147483641,无法将CursorWindow写入Parcel

时间:2013-07-08 12:49:59

标签: android parcelable runtimeexception

我在进程之间发送/接收自定义Query对象。 Query实现Parcelable并包装CursorWindow实例。首先,我通过Messenger将其从流程A发送到流程B.这很好用。但是当通过Intent将同一个实例从进程B发送到进程C时,会抛出此错误:

E/com.blablabla.android.widget.ZKWidgetManager( 4583): java.lang.RuntimeException: Could not write CursorWindow to Parcel due to error -2147483641.
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.database.CursorWindow.nativeWriteToParcel(Native Method)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.database.CursorWindow.writeToParcel(CursorWindow.java:701)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.os.Parcel.writeParcelable(Parcel.java:1254)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at com.blablabla.android.helpers.db.cursor.ParcelableCursor.writeToParcel(ParcelableCursor.java:461)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.os.Parcel.writeParcelable(Parcel.java:1254)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.os.Parcel.writeValue(Parcel.java:1173)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.os.Parcel.writeMapInternal(Parcel.java:591)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.os.Bundle.writeToParcel(Bundle.java:1619)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.os.Parcel.writeBundle(Parcel.java:605)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.os.Parcel.writeValue(Parcel.java:1170)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.os.Parcel.writeMapInternal(Parcel.java:591)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.os.Bundle.writeToParcel(Bundle.java:1619)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.os.Parcel.writeBundle(Parcel.java:605)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.content.Intent.writeToParcel(Intent.java:6475)
E/com.blablabla.android.widget.ZKWidgetManager( 4583): at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:1984)

以下是相关代码:

public class ParcelableCursor implements Parcelable, CrossProcessCursor {

    /** Cursor data window */
    protected CursorWindow window = CursorHelper.getCursorWindowInstance(); // This just does a new CursorWindow(false) for 2.x compatibility reasons.

    [...]

    @Override
    public void writeToParcel(final Parcel out, final int flags) {
        out.writeParcelable(this.window, 0); // <<<<< Exception thrown here
        [...]
    }
}

测试Intent

ParcelableCursor test = new ParcelableCursor();

final Bundle bndl = new Bundle(); // Or with ClassLoader
bndl.putParcelable(BUNDLE, test);


intent.setAction(RECEIVER_QUERY_NAME);
intent.putExtra(QUERY, bndl);

正如您所看到的,这不是数据问题,因为此示例ParcelableCursor实际上是空的。使用新的CursorWindow(String)构造函数而不是弃用的CursorWindow(boolean)也无济于事。

这个错误代码意味着什么,或者在哪里查看此错误代码?

任何提示都表示赞赏,提前谢谢!

1 个答案:

答案 0 :(得分:1)

我最终最终单独实施了这个ParcelableCursor,以用于IntentParcelableCursorForIntent),但内部不使用CursorWindow但只使用ListMap

相关问题