【问题标题】:loading locations into google map - google maps v2将位置加载到谷歌地图 - 谷歌地图 v2
【发布时间】:2013-05-28 19:06:14
【问题描述】:

我正在尝试将位置从 Android 手机内的联系人列表加载到谷歌地图。每当用户点击按钮时,它会将所有联系人加载到谷歌地图中,​​并在每个联系人的位置上放置一个标记。

我已经想出了如何获取联系人的地址,但是我在循环和放置标记时遇到了麻烦。

        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();
        }
    }

我将姓名、地址和城市存储在一个列表中,它将它们分成单独的变量。它获取地址和城市,将它们转换为经度和纬度,然后在地图上放置标记。

我在尝试让它工作时遇到了麻烦。它只是崩溃并给我错误,如果我硬编码地址,try and catch 部分本身就可以正常工作。我完全没有想法,我花了 2-3 个小时试图找出原因。我做错了吗?或者有更好的解决方案吗?

编辑 - 这里是我的日志猫

05-28 03:23:19.575:E/AndroidRuntime(8632):致命异常:主要 05-28 03: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): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2088) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 android.app.ActivityThread.access$700(ActivityThread.java:139) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 android.os.Handler.dispatchMessage(Handler.java:99) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 android.os.Looper.loop(Looper.java:137) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 android.app.ActivityThread.main(ActivityThread.java:4918) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 java.lang.reflect.Method.invokeNative(Native Method) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 java.lang.reflect.Method.invoke(Method.java:511) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 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): 在 com.example.app1project.ContactsMapActivity.onCreate(ContactsMapActivity.java:79) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 android.app.Activity.performCreate(Activity.java:5048) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 05-28 03:23:19.575: E/AndroidRuntime(8632): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2052) 05-28 03:23:19.575: E/AndroidRuntime(8632): ... 11 更多

【问题讨论】:

  • 你能发布 logcat 崩溃时的输出吗?
  • 解析联系人字符串时出错。尝试记录这些字符串以查看它们的外观。我敢打赌其中一个看起来很奇怪或者是空的,这就是导致崩溃的原因
  • 问题已解决。我真的应该开始仔细检查 logcat。谢谢

标签: android google-maps


【解决方案1】:
Caused by: java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:208)
at com.example.app1project.ContactsMapActivity.onCreate(ContactsMapActivity.java:79)

说明一切。你的问题出在这条线上。 String 联系人很可能没有足够的逗号。

【讨论】:

    【解决方案2】:

    你试过了吗?,

        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)));
        }
    
      } 
    

    【讨论】:

    • 这对我没有帮助...您的代码仅演示了如何添加标记。
    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多