相关疑难解决方法(0)

ItemizedOverlay.getIndexToDraw中的NullPointerException

我有一个相对简单的MapActivity,我试图在给定的地图区域内显示一个"阵营"列表.我创建了一个名为CampOverlayItem的自定义子类OverlayItem,一个名为CampsOverlay的自定义ItemizedOverlay返回CampOverlayItems,当然还有一个填充地图的MapActivity子类.

我正在使用我的活动中创建的AsyncTask从数据库中提取叠加数据.AsyncTask是从附加到MapView的ViewTreeObserver.OnGlobalLayoutListener触发的.

在AsyncTask的onPostExecute方法中,我创建了一个CampsOverlay类的新实例,并向其传递了一个从数据库返回的阵营列表(在doInBackground中获取).然后我打电话给:

mapView.getOverlays().add(newOverlay);
Run Code Online (Sandbox Code Playgroud)

newOverlay是我刚刚创建的CampsOverlay.所有这些代码都运行没有错误,但是当Map尝试绘制自己时,我得到一个带有以下堆栈跟踪的NullPointerException:

java.lang.NullPointerException
   at
com.google.android.maps.ItemizedOverlay.getIndexToDraw(ItemizedOverlay.java:
211)
   at
com.google.android.maps.ItemizedOverlay.draw(ItemizedOverlay.java:240)
   at com.google.android.maps.Overlay.draw(Overlay.java:179)
   at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:
42)
   at com.google.android.maps.MapView.onDraw(MapView.java:476)
   at android.view.View.draw(View.java:6274)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1526)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
   at android.view.View.draw(View.java:6277)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1526)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
   at android.view.View.draw(View.java:6277)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1526)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
   at android.view.View.draw(View.java:6277)
   at android.widget.FrameLayout.draw(FrameLayout.java:352)
   at com.android.internal.policy.impl.PhoneWindow
$DecorView.draw(PhoneWindow.java:1883)
   at android.view.ViewRoot.draw(ViewRoot.java:1332)
   at android.view.ViewRoot.performTraversals(ViewRoot.java:1097)
   at android.view.ViewRoot.handleMessage(ViewRoot.java:1613)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:123)
   at android.app.ActivityThread.main(ActivityThread.java:4203)
   at …
Run Code Online (Sandbox Code Playgroud)

android android-mapview

14
推荐指数
1
解决办法
4783
查看次数

ItemizedOverlay旋转标记并崩溃

有点奇怪的帖子,因为这是我之前发布的,认为它已经解决但没有!

我有一种情况,我需要为每个标记使用自定义Drawable,我需要的效果是将标记旋转一定数量的度数,我可能完全错误的方式. 

作为一个开始,我使用优秀的知识共享,因为这确实有效,只有在我添加后才会中断!

https://github.com/commonsguy/cw-advandroid/tree/master/Maps/NooYawkAsync

上一篇文章和代码在这里 

Android Maps NullPointerException ItemizedOverlay

如果有人能够推荐一种更好,更稳定的方式来获得一个旋转的Drawable并让我走上正确的道路,这将是很棒的.

正如你从我的代码中看到的那样,我没有在叠加层中设置Drawable,而是在另一个对象中进行外部操作,并怀疑这就是它破坏的原因!

目前我通过这样设置我的Drawable ......

public Drawable getRotatedIcon(String string) {
        Drawable marker = null;
        Double tempHeading = Double.valueOf(string);
        long intHeading = Math.round(tempHeading / 10);

        int resID = getResources().getIdentifier(
                "icon_rotate_" + Long.toString(intHeading), "drawable",
                "com.test.testapp");

        marker = getResources().getDrawable(resID);
        marker.setBounds(0, 0, marker.getIntrinsicWidth(),marker.getIntrinsicHeight());
        return marker;

    }
Run Code Online (Sandbox Code Playgroud)

然后创建它我用这个...

if (sites != null){
            sites.clearItems(); 
        }else{
            sites = new SitesOverlay();
        }

        for (int i = 0; i < getMainOverlayArray().size(); i++) {
            tempOver = getMainOverlayArray().get(i);
            tempOver.setMarker(getRotatedIcon(tempOver.getcourse()));
            if (tempOver != null){ …
Run Code Online (Sandbox Code Playgroud)

android drawable itemizedoverlay

0
推荐指数
1
解决办法
3452
查看次数