尝试在google maps V2 android应用中获取null数组的长度 [英] Attempt to get length of null array in google maps V2 android app

查看:324
本文介绍了尝试在google maps V2 android应用中获取null数组的长度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在开发一个使用google maps api的android应用程序,并且我有时会因为没有任何理由而发生奇怪的崩溃(在我看来)。这里是崩溃日志:

  12-02 16:38:57.071 20796-21137 / com.appsolute.ParkYoo E / AndroidRuntime:致命异常:GLThread 4623 
进程:com.appsolute.ParkYoo,PID:20796
java.lang.NullPointerException:尝试从java.nio.DirectByteBuffer.put获取空数组
的长度( DirectByteBuffer.java:399)
位于java.nio.ByteBufferAsShortBuffer.put(ByteBufferAsShortBuffer.java:159)
位于com.google.maps.api.android.lib6.gmm6.ocadd(未知源)
在com.google.maps.api.android.lib6.gmm6.ocada(未知来源)
来自com.google.maps.api.android.lib6.gmm6.oaa(未知来源)
at com.google.maps.api.android.lib6.gmm6.ocb(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.oca(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.ola(未知来源)
,位于com.google.maps.api.android.lib6.gmm6 .olb(未知来源)
,位于com.google.maps.api.android.lib6.gmm6.o.cw.k(未知来源)
,位于com.google.maps.api.android.lib6 .gmm6.o.cw.run(Unknown Source)

正如您所看到的,崩溃发生在谷歌API,但代码已被混淆,所以我没有更多的信息,除了在第一行:

  final void put(short [] src,int srcOffset,int shortCount){
checkIsAccessible();
int byteCount = checkPutBounds(SizeOf.SHORT,src.length,srcOffset,shortCount); //这里是错误
this.block.pokeShortArray(offset + position,src,srcOffset,shortCount,order.needsSwap);
position + = byteCount;

$ b @Override
public ShortBuffer put(short [] src,int srcOffset,int shortCount){
byteBuffer.limit(limit * SizeOf.SHORT);
byteBuffer.position(position * SizeOf.SHORT);
if(byteBuffer instanceof DirectByteBuffer){
((DirectByteBuffer)byteBuffer).put(src,srcOffset,shortCount);
(else){
((ByteArrayBuffer)byteBuffer).put(src,srcOffset,shortCount);
}
this.position + = shortCount;
返回此;
}

有没有人遇到过这个错误?我究竟做错了什么 ?

谢谢!

解决方案

您可能会运行多个地图片段。查看我对当前困扰Google地图库的关于多个地图片段的致命错误的写作 - 以及我如何找到解决方法。


$ b

http://www.aphex.cx/the_google_maps_api_is_broken_on_android_5_here_s_a_workaround_for_multiple_map_fragments/

Google目前正在处理此案件,并将其列为优先事项用于Google Play服务的下一个版本!

I am currently developing an android application using google maps api and I sometimes get a weird crash (in my opinion) for no ovious reason. Here's the crash log :

12-02 16:38:57.071  20796-21137/com.appsolute.ParkYoo E/AndroidRuntime﹕ FATAL EXCEPTION: GLThread 4623
    Process: com.appsolute.ParkYoo, PID: 20796
    java.lang.NullPointerException: Attempt to get length of null array
            at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:399)
            at java.nio.ByteBufferAsShortBuffer.put(ByteBufferAsShortBuffer.java:159)
            at com.google.maps.api.android.lib6.gmm6.o.c.a.d.d(Unknown Source)
            at com.google.maps.api.android.lib6.gmm6.o.c.a.d.a(Unknown Source)
            at com.google.maps.api.android.lib6.gmm6.o.a.a(Unknown Source)
            at com.google.maps.api.android.lib6.gmm6.o.c.b(Unknown Source)
            at com.google.maps.api.android.lib6.gmm6.o.c.a(Unknown Source)
            at com.google.maps.api.android.lib6.gmm6.o.l.a(Unknown Source)
            at com.google.maps.api.android.lib6.gmm6.o.l.b(Unknown Source)
            at com.google.maps.api.android.lib6.gmm6.o.cw.k(Unknown Source)
            at com.google.maps.api.android.lib6.gmm6.o.cw.run(Unknown Source)

As you can see, the crash happens in google api but the code has been obfuscated so I don't have more infos about that except on the 2 first lines :

final void put(short[] src, int srcOffset, int shortCount) {
    checkIsAccessible();
    int byteCount = checkPutBounds(SizeOf.SHORT, src.length, srcOffset, shortCount); // here is the error
    this.block.pokeShortArray(offset + position, src, srcOffset, shortCount, order.needsSwap);
    position += byteCount;
  }

@Override
    public ShortBuffer put(short[] src, int srcOffset, int shortCount) {
        byteBuffer.limit(limit * SizeOf.SHORT);
        byteBuffer.position(position * SizeOf.SHORT);
        if (byteBuffer instanceof DirectByteBuffer) {
            ((DirectByteBuffer) byteBuffer).put(src, srcOffset, shortCount);
        } else {
            ((ByteArrayBuffer) byteBuffer).put(src, srcOffset, shortCount);
        }
        this.position += shortCount;
        return this;
    }

Has anyone already encountered this bug ? What am I doing wrong ? If anybody has an insight concerning this issue, I'll be pleased to discuss it.

Thanks !

解决方案

You're likely running more than one map fragment. See my writeup on this fatal bug currently haunting the Google Maps library, concerning multiple map fragments - and how I found a workaround.

http://www.aphex.cx/the_google_maps_api_is_broken_on_android_5_here_s_a_workaround_for_multiple_map_fragments/

Google is currently working on the case and is prioritizing it for the next release of Google Play Services!

这篇关于尝试在google maps V2 android应用中获取null数组的长度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆