关于Android开发Google Map的问题


没事儿做了一个Google Map的例子,但一运行就报错了,导致程序打不开。

java.lang.ClassNotFoundException:  in loader dalvik.system.PathClassLoader

后来在网上搜了半天,终于找到了。。。。

原来是 AndroidManifest.xml 配置错了,最后改了一下,配置如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.android"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MapsDemos"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  <uses-library android:name="com.google.android.maps" />
    </application>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 <uses-permission android:name="android.permission.INTERNET" />
</manifest>

刚开始我把<uses-library android:name="com.google.android.maps" />这段代码放在application外面,结果就出错了,后来放到application里面就没问题了。剩下外面那三个 user-permission 是用来增加权限的(我看别人有只写两个的,我索性全加上了)。

再看下res->layout下的 main.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
 <com.google.android.maps.MapView
 android:id="@+id/map"
 android:enabled="true"
 android:clickable="true"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:apiKey="0o6HIJKLMNlxURsr8vqABCDEFG_abcdefg"
    />
</LinearLayout>
apiKey需要自己申请一个才行。

对了,刚创建的类原先是继承Activity的,但需要改成MapActivity,代码如下

package com.example.android;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import com.google.android.maps.*;

public class MapsDemos extends MapActivity {
 private MapView myMapView;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  myMapView = (MapView) findViewById(R.id.map);// 获得地图
  System.out.println("onCreat...");
 }

 @Override
 protected boolean isRouteDisplayed() {
  // TODO Auto-generated method stub
  return false;
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  super.onCreateOptionsMenu(menu);
  menu.add(1, 0, 0, "卫星地图");
  menu.add(1, 1, 0, "交通地图");
  menu.add(1, 2, 0, "放大");
  menu.add(1, 3, 0, "缩小");
  menu.add(1, 4, 0, "邯郸");
  System.out.println("onCreateOptionsMenu...");
  return true;
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case 0:
   myMapView.setSatellite(true); // 卫星模式
   myMapView.setTraffic(false); // 交通模式
   break;
  case 1:
   myMapView.setSatellite(false); // 卫星模式
   myMapView.setTraffic(true); // 交通模式
   break;
  case 2:
   myMapView.getController().setZoom(myMapView.getZoomLevel() + 1);
   myMapView.displayZoomControls(true);
   android.widget.Toast.makeText(this,
     "value is " + myMapView.getZoomLevel() + "click 放大 ",
     android.widget.Toast.LENGTH_LONG).show();
   // TODO
   myMapView.getMapCenter();
   myMapView.getMaxZoomLevel();
   break;
  case 3:
   myMapView.getController().setZoom(myMapView.getZoomLevel() - 1);
   myMapView.displayZoomControls(true);
   android.widget.Toast.makeText(this,
     "value is " + myMapView.getZoomLevel() + "click 缩小 ",
     android.widget.Toast.LENGTH_LONG).show();
   // TODO
   myMapView.getMapCenter();
   myMapView.getMaxZoomLevel();
   break;
  case 4:
   // 邯郸114.4541E,36.6254N
   GeoPoint pointHandan = new GeoPoint((int) 114.4541 * 1000000,
     (int) 36.6254 * 1000000);
   // 取得地图View的控制
   MapController mc = myMapView.getController();
   // 定位到邯郸
   mc.animateTo(pointHandan);
   mc.setZoom(12);
   break;
  default:
   myMapView.setSatellite(true); // 卫星模式
   myMapView.setTraffic(false); // 交通模式
  }
  return false;
 }
}

相关内容