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

标签 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) 也没有帮助。

谁知道这个错误代码是什么意思,或者在哪里可以找到这个错误代码?

感谢任何提示,提前致谢!

最佳答案

我最终完成了此 ParcelableCursor 的单独实现,以用于不使用 CursorWindow 的 Intent (ParcelableCursorForIntent) 在内部,但只有 ListMap

关于android - 由于错误 -2147483641,无法将 CursorWindow 写入 Parcel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17527095/

相关文章:

java - Android TestCase 中的 Dagger 2 依赖注入(inject)

android - 收到短信后在 Android 中刷新 ListView 不起作用

Android Parcelable 与 JsonObject

android - 如何在 Kotlin 1.1.60 中使用@Parcelize?

android - MVP kotlin 中的 Mockito 测试 - 但是,与此模拟异常恰好有 1 次交互

Android - 图像按钮比例

java - 如何在 Android 中使通用数组列表可分割?

java - EJB容器中RuntimeException和@ApplicationException(rollback=true)Exception的区别

android - java.lang.RuntimeException : stop failed at android. 媒体.MediaRecorder.stop(MediaRecorder.java)

Java:在 spoj.com 上运行时出现 RuntimeException