0

在我的方法的一部分中,我配置infocontents以從標記的「標題」中獲取html內容並將其顯示在infowindow中。我也讓窗口成爲​​可點擊的鏈接。我正在使用Android-Maps-Extensions對標記進行聚類。Android-Maps-Extensions InfoContents生成異常

private void setUpMapIfNeeded() { 
     // Do a null check to confirm that we have not already instantiated the map. 
     if (mMap == null) { 
      // Try to obtain the map from the SupportMapFragment. 
      mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
        .getExtendedMap(); 
      // Check if we were successful in obtaining the map. 
      if (mMap != null) { 
       mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { 
        @Override 
        public View getInfoWindow(Marker marker) { 
         return null; 
        } 

        @Override 
        public View getInfoContents(Marker marker) { 
         View v = getLayoutInflater().inflate(R.layout.infowindow_layout, null); 
         TextView textView = (TextView) v.findViewById(R.id.marker_label); 
         Spanned spannedContent = Html.fromHtml(marker.getTitle()); 
         textView.setText(spannedContent, TextView.BufferType.SPANNABLE); 
         return v; 
        } 
       }); 

       mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { 
        @Override 
        public void onInfoWindowClick(Marker marker) { 
         int firstindex = marker.getTitle().indexOf("href=")+5; 
         int lastindex = marker.getTitle().indexOf("target='_blank'"); 
         String s = marker.getTitle().substring(firstindex,lastindex); 
         Log.d("myapplication", s); 
         Uri uri = Uri.parse(s); 
         Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
         startActivity(intent); 

        } 
       }); 

       ClusteringSettings clusteringSettings = new ClusteringSettings(); 
       mMap.setClustering(clusteringSettings); 

       setUpMap(); 
      } 
     } 
    } 

在按下上一個單獨的標記物,它顯示信息窗口就好(像以前一樣我加入ClusterSettings和setClustering代碼)。然而,當我按在羣集上,我得到這個異常:

01-08 15:00:20.210 3384-3384/com.example.ron.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.NullPointerException 
      at java.io.StringReader.<init>(StringReader.java:46) 
      at android.text.HtmlToSpannedConverter.convert(Html.java:411) 
      at android.text.Html.fromHtml(Html.java:139) 
      at android.text.Html.fromHtml(Html.java:102) 
      at com.example.ron.myapplication.MapsActivity$1.getInfoContents(MapsActivity.java:81) 
      at com.androidmapsextensions.impl.DelegatingGoogleMap$DelegatingInfoWindowAdapter.getInfoContents(DelegatingGoogleMap.java:414) 
      at com.google.android.gms.maps.GoogleMap$13.g(Unknown Source) 
      at com.google.android.gms.maps.internal.d$a.onTransact(Unknown Source) 
      at android.os.Binder.transact(Binder.java:279) 
      at com.google.android.gms.maps.internal.p.b(SourceFile:112) 
      at com.google.maps.api.android.lib6.c.h.a(Unknown Source) 
      at com.google.maps.api.android.lib6.c.h.a(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.c.h.b(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.c.j.c(Unknown Source) 
      at com.google.maps.api.android.lib6.c.al.c(Unknown Source) 
      at com.google.maps.api.android.lib6.c.aj.g(Unknown Source) 
      at com.google.maps.api.android.lib6.c.al.h(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.c.h.a(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.aw.a(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.bf.a(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.be.a(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.bx.d(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.o.ak.onSingleTapConfirmed(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.i.g.onSingleTapConfirmed(Unknown Source) 
      at com.google.maps.api.android.lib6.gmm6.i.i.handleMessage(Unknown Source) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:123) 
      at android.app.ActivityThread.main(ActivityThread.java:3687) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:507) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
      at dalvik.system.NativeStart.main(Native Method) 

好像當我按在集羣上,它呼籲infocontent和信息窗口。無論如何,我可以禁用實際集羣的infowindow,並在集羣被按下時放大它。

如果您需要更多說明或需要更多信息,請在下面留言。

編輯:解決感謝MaciejGórski。我將getInfoContents方法更改爲這樣以便我不會收到錯誤:

public View getInfoContents(Marker marker) { 
        View v = getLayoutInflater().inflate(R.layout.infowindow_layout, null); 
        if (marker.isCluster()) { 
         return null; 
        } 
        TextView textView = (TextView) v.findViewById(R.id.marker_label); 
        Spanned spannedContent = Html.fromHtml(marker.getTitle()); 
        textView.setText(spannedContent, TextView.BufferType.SPANNABLE); 
        return v; 
       } 
      }); 

回答

1

集羣標記在默認情況下沒有標題。您正在獲得NPE,因爲您將null發送給期望有一些非空值的Android代碼。

您可能希望以不同的方式爲它們生成標題,例如通過遍歷所有標記在集羣:

if (marker.isCluster()) { 
    Collection<Marker> markers = marker.getMarkers(); 
    // itarate over markers and getTitle on each 
} else { 
    // your old code 
} 

查看演示應用程序相關代碼:DemoFragment.java