2013-05-28 211 views
0

我試圖從android手機內的聯繫人列表中加載位置到谷歌地圖。每當用戶點擊按鈕時,它會將所有聯繫人加載到谷歌地圖中,​​並在每個聯繫人的位置上放置一個標記。加載位置到谷歌地圖 - 谷歌地圖v2

我已經想出瞭如何獲取聯繫人的地址,但我只是循環和放置標記時遇到了問題。

 for (int i = 0; i < addresslist.size(); i++) { 
     String contact = namelist.get(i).toString(); 

     StringTokenizer tokens = new StringTokenizer(contact, ","); 
     String name = tokens.nextToken(); 
     String street = tokens.nextToken(); 
     String city = tokens.nextToken(); 

     try { 
      List<Address> a = geoCoder.getFromLocationName(street + ", " 
        + city, 1); 
      double lat = a.get(0).getLatitude(); 
      double lon = a.get(0).getLongitude(); 

      LatLng location = new LatLng(lat, lon); 

      mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 
      mMap.addMarker(new MarkerOptions().position(location).title(name)); 
      // mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location,15)); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

我有姓名,地址和城市存儲在一個列表中,它將它們分離成單獨的變量。它需要地址和城市,將它們轉換成經度和緯度,然後將標記放置在地圖上。

我在嘗試使其工作時遇到問題。它只是崩潰,給我錯誤,嘗試和捕捉部分本身工作正常,如果我硬編碼的地址英寸我都沒有想法,我花了2-3小時試圖找出原因。我做錯了嗎?還是有更好的解決方案呢?

編輯 - 在這裏,我的logcat的

3月5日至28日:23:19.575:E/AndroidRuntime(8632):致命異常:主要 3月5日至28日:23:19.575:E/AndroidRuntime (8632):java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.app1project/com.example.app1project.ContactsMapActivity}:java.util.NoSuchElementException 05-28 03:23:19.575:E/AndroidRuntime 8632):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2088) 05-28 03:23:19.575:E/AndroidRuntime(8632):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113) 05-28 03:23:19.575:E/AndroidRuntime(8632):at android.app.ActivityThread.access $ 700(ActivityThread.java:139) 05-28 03:23:19.575:E/AndroidRuntime(8632):at android.app.ActivityThread $ H.handleMessage(ActivityThread .java:1224) 05-28 03:23:19.575:E/AndroidRuntime(8632):at android.os.Handler.dispatchMessage(Handler.java:99) 05-28 03:23:19.575:E/AndroidRuntime (8632):at android.os.Looper.loop(Looper.java:137) 05-28 03:23:19.575:E/AndroidRuntime(8632):at android.app.ActivityThread.main(ActivityThread.java:4918 ) 05-28 03:23:19.575:E/AndroidRuntime(8632):at java.lang.reflect.Method.invokeNative(Native Method) 05-28 03:23:19.575:E/AndroidRuntime(8632):at java.lang.reflect.Method.invoke(Method.java:511) 05-28 03:23:19.575:E/AndroidRuntime(8632):at com.android.internal.os.Zygote Init $ MethodAndArgsCaller.run(ZygoteInit.java:1004) 05-28 03:23:19.575:E/AndroidRuntime(8632):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 05 -28 03:23:19.575:E/AndroidRuntime(8632):at dalvik.system.NativeStart.main(Native Method) 05-28 03:23:19.575:E/AndroidRuntime(8632):由java.util .NoSuchElementException 05-28 03:23:19.575:E/AndroidRuntime(8632):在java.util.StringTokenizer.nextToken(StringTokenizer.java:208) 05-28 03:23:19.575:E/AndroidRuntime(8632) :at com.example.app1project.ContactsMapActivity.onCreate(ContactsMapActivity.java:79) 05-28 03:23:19.575:E/AndroidRuntime(8632):at android.app.Activity.performCreate(Activity.java:5048) 05-28 03:23:19.575:E/AndroidRuntime(8632):at android.app.Instrumentation.callActivityOnC reate(Instrumentation.java:1094) 05-28 03:23:19.575:E/AndroidRuntime(8632):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2052) 05-28 03:23:19.575: E/AndroidRuntime(8632):... 11更多

+0

你可以發佈它崩潰時的logcat輸出嗎? – chopchop

+0

編輯後 – user1704756

+0

解析聯繫人字符串時發生錯誤。嘗試記錄這些字符串以查看它們的外觀。我敢打賭,其中一個看起來很奇怪或是空的,這就是導致崩潰 – chopchop

回答

0
Caused by: java.util.NoSuchElementException 
at java.util.StringTokenizer.nextToken(StringTokenizer.java:208) 
at com.example.app1project.ContactsMapActivity.onCreate(ContactsMapActivity.java:79) 

說明了一切。你的問題在那條線上。 String聯繫人很可能沒有足夠的逗號。

0

你試過嗎?,

public class MainActivity extends Activity { 
    static final LatLng HAMBURG = new LatLng(53.558, 9.927); 
    static final LatLng KIEL = new LatLng(53.551, 9.993); 
    private GoogleMap map; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
     .getMap(); 

    if (map!=null){ 
     Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG) 
      .title("Hamburg")); 
     Marker kiel = map.addMarker(new MarkerOptions() 
      .position(KIEL) 
      .title("Kiel") 
      .snippet("Kiel is cool") 
      .icon(BitmapDescriptorFactory 
       .fromResource(R.drawable.ic_launcher))); 
    } 

    } 
+0

這並不能真正幫助我...你的代碼只演示如何添加標記。 – user1704756