【问题标题】:Exception only on Android 3.0仅在 Android 3.0 上例外
【发布时间】:2012-08-17 10:35:27
【问题描述】:

我正在将 Kryonet 用于 Android 应用程序,并且可以在除 3.0 版本之外的所有 Android 版本上完美运行。我收到以下异常:

E/AndroidRuntime(16861): FATAL EXCEPTION: Thread-30
E/AndroidRuntime(16861): com.esotericsoftware.kryo.KryoException: java.lang.StringIndexOutOfBoundsException: start=0 end=5 data.length=512 index=6 length=5
E/AndroidRuntime(16861): Serialization trace:
E/AndroidRuntime(16861): email (com.momasoft.sudokutournament.network.Network$Login)
E/AndroidRuntime(16861): at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:203)

为什么这种情况只发生在 Android 3.0 上?有办法解决吗?

谢谢!

【问题讨论】:

  • 字符串是什么?它如何设置为 5 个字符的字符串
  • 是用户输入的字符串形式的电子邮件。问题是,它可以在任何其他版本的 android 上完美运行!
  • 您是否对电子邮件地址进行了任何验证?
  • 是的,我确信它与字符串本身无关...... Android 3.0 不喜欢的序列化方法中一定有一些东西:S

标签: android serialization android-3.0-honeycomb kryo


【解决方案1】:

我找到了一个解决方案,调试 Kryo 库: 我建议从 kryo 更改以下代码:

com.esotericsoftware.kryo.io.Output.java:307

/***Change this: ***/
value.getBytes(0, charCount, buffer, position);
position += charCount;

/***for this: ***/
byte[] valueB = value.getBytes();
for (int j = 0; j < valueB.length; j++) {
   this.writeByte(valueB[j]);
}

getBytes(int start, int end, byte[] elem, int offset) 已被弃用,并在 android 3.0 中出现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多