2016-03-22 15 views
1

サーバからフェッチされた複数のマーカーをプロットしようとしていますが、いくつかのイベントでそれらを削除し、キャンセルボタンを押すと再びプロットします。毎回私は私がどのようにこのmap.clear()で未知のimageData参照が公開されました

try { 
     for (int i = 0; i < Constant.spot_details.size(); i++) { 
       LatLng latlng = new LatLng(Double.parseDouble(Constant.spot_details.get(i).geo_x), 
       Double.parseDouble(Constant.spot_details.get(i).geo_y)); 
       final MarkerOptions marker = new MarkerOptions().position(latlng); 

       if (Constant.spot_details.get(i).type.equals("a")) { 
        marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.a_marker)); 
       } else if (Constant.spot_details.get(i).type.equals("b")) { 
        marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.b_marker_grey)); 
       } else 
        marker.icon(BitmapDescriptorFactory.fromBitmap(Utils.string_to_bitmap(Constant.spot_details.get(i).logo, activity))); 

        marker.title(Constant.spot_details.get(i).name); 
        final Marker m=mMap.addMarker(marker); 
        all_markers.add(m); 
        animate_marker_fade_in(m); 
        plotted_spot_array.add(Constant.spot_details.get(i)); 
        marker_map.put(marker.getPosition().latitude + marker.getPosition().longitude, i); 
       } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

サーバから詳細を取得した後これは私が(plot_all_markersメソッドを呼び出すことによって)マーカーを追加してい方法です
java.lang.IllegalArgumentException: Released unknown imageData reference` 

私は

このエラーが出る

map.clear() 

を呼び出しますマップからマーカーを削除し、必要なマーカーのみをプロットする

mMap.clear(); 
    PolylineOptions lineOptions = new PolylineOptions(); 
    String s = ""; 
    latLngs = new ArrayList<LatLng>(); 
    try { 
     // s = result.getString("points"); 
     s = Constant.request_spot.directions[0].overview_polyline.points; 
     latLngs = decodePoly(s); 
     s = ""; 
     LatLng latLong = new LatLng(0, 0); 
     for (LatLng l : latLngs) { 
      lineOptions.add(l); 
      s = l.latitude + ", " + s; 
      latLong = l; 
     } 
     lineOptions.width(5); 
     lineOptions.color(R.color.theme_color); 
     _m = Demand.mMap.addMarker(new MarkerOptions().position(latLong) 
       .icon(BitmapDescriptorFactory.fromResource(R.drawable.a_marker_yellow))); 
     LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
     builder.include(new LatLng(Constant.request_spot.directions[0].legs[0].start_location.lat, 
       Constant.request_spot.directions[0].legs[0].start_location.lng)); 
     builder.include(new LatLng(Constant.request_spot.directions[0].legs[0].end_location.lat, 
       Constant.request_spot.directions[0].legs[0].end_location.lng)); 
     LatLngBounds bounds = builder.build(); 
     int padding = 300; // offset from edges of the map in pixels 
     CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding); 
     Demand.mMap.animateCamera(cu); 
     Demand.mMap.addPolyline(lineOptions); 
     cross_item.setVisible(true); 

最後cross_itemを押すことに私は再び)(mMap.clearを呼び出していますが、そのこれはどのように私はこのエラーを回避することができ、私のLogcat出力

java.lang.IllegalArgumentException: Released unknown imageData reference 
at maps.ce.i.a(Unknown Source) 
at maps.ei.bh.c(Unknown Source) 
at maps.ei.s.o(Unknown Source) 
at maps.ei.bu.e(Unknown Source) 
at com.google.android.gms.maps.internal.e$a.onTransact(:com.google.android.gms.alldynamite:205) 
at android.os.Binder.transact(Binder.java:387) 
at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.clear(Unknown Source) 
at com.google.android.gms.maps.GoogleMap.clear(Unknown Source) 
at com.drishtigroup.needtopark.fragments.Demand.onOptionsItemSelected(Demand.java:499) 
at android.support.v4.app.Fragment.performOptionsItemSelected(Fragment.java:2085) 
at android.support.v4.app.FragmentManagerImpl.dispatchOptionsItemSelected(FragmentManager.java:2163) 
at android.support.v4.app.FragmentController.dispatchOptionsItemSelected(FragmentController.java:304) 
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:410) 
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:167) 
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) 
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) 
at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:69) 
at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:169) 
at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:760) 
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811) 
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958) 
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:948) 
at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618) 
at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:139) 
at android.view.View.performClick(View.java:5201) 
at android.view.View$PerformClick.run(View.java:21163) 
at android.os.Handler.handleCallback(Handler.java:746) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5443) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

ある

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == R.id.action_filter) { 
     mMap.clear(); 
     cross_item.setVisible(false); 
     plot_all_markers(); 
     requestServer(mMap.getCameraPosition().target); 
    } 
    return super.onOptionsItemSelected(item); 
} 

そのライン上でクラッシュ?

+0

どのような種類のオブジェクトが 'cross_item'ですか?マップ関連ですか? – antonio

+0

@ antonio-そのシンプルなメニューです。そのmenuitemをタップするとmap.clear()が呼び出されます – Victor

答えて

0

IllegalArgumentExceptionは、メソッドまたは関数に渡された引数が、意図した目的に有効でないこと、またはメソッドが期待する形式と異なることを示す例外を意味します。

このgithub issueでは、マーカーをクリアする際にクラスタマネージャを使用して、IllegalArgumentException:unknown imageData referenceをリリースしました。ここでは、マーカをマップ自体から直接クリアするのではなく、クラスタマネージャを使用してマーカをクリアして追加することをお勧めします。

mClusterManager.clearItems(); 
mClusterManager.addItems(mMapVenueItems); 
mClusterManager.cluster(); 

あなたの問題をお手伝いしたいと思います。

+0

私のアプリケーションではクラスタを使用していません。 ClusterManagerを使用する方が良いと思いますか? – Victor

関連する問題