MapView:找不到方法B引用的类A.

时间:2011-06-30 04:42:31

标签: java android xml google-maps android-mapview

屏幕上有3个按钮!开始,查看地图,停止

当我点击查看地图时,它应该转到显示地图的新屏幕!但出现了问题,应用程序正在关闭!我一直在找不到从方法B错误引用的A类。请请有人纠正。我已经被这3天震惊了! :'(

main.xml中

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

<TextView 
    android:text="GPS App"
    android:id="@+id/textView1"
    android:textSize="40sp"   
    android:padding="10dp"
    android:gravity="center"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"   
    />

<Button 
    android:text="Start" 
    android:id="@+id/buttonStart"
    android:textSize="30sp" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent"  
    />

<Button 
    android:text="View Map" 
    android:id="@+id/buttonMap" 
    android:textSize="30sp" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    />

<Button 
    android:text="Stop" 
    android:id="@+id/buttonStop" 
    android:textSize="30sp" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    />

</LinearLayout>

map.xml

<RelativeLayout
    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
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mymap"
    android:clickable="true"
    android:enabled="true"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:apiKey="xxxxxxxxxxxxx" 
    />

<LinearLayout
    android:id="@+id/myzoom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    />

</RelativeLayout>

的manifest.xml

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

MainActivity.java

package Firstdroid.Gps;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity 
{
    /** Called when the activity is first created. */
   @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        /* START BUTTON */

        Button startButton = (Button) findViewById(R.id.buttonStart);
        startButton.setOnClickListener(new OnClickListener() 
        {
                @Override
                public void onClick(View arg0) 
                {
                Log.d("Firstdroid.Gps", "Starting Exploration..");
                // Start Exploration
                startService(new Intent(MainActivity.this, GPSexp.class));
                }
        });

        /* MAP BUTTON */

        Button mapButton = (Button) findViewById(R.id.buttonMap);
        mapButton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v){
                    Log.d("Firstdroid.Gps", "Loading Map..");
                    // Loading Google Map View
                    startService(new Intent(MainActivity.this, MapViewer.class));
                }       
        });

        /* STOP BUTTON */

        Button stopButton = (Button) findViewById(R.id.buttonStop);
        stopButton.setOnClickListener(new OnClickListener() 
        {
                @Override
                public void onClick(View v) 
                {
                Log.d("Firstdroid.Gps", "Stopping Exploration..");
                // Stop Exploration
                stopService(new Intent(MainActivity.this, GPSexp.class));
        }
        });
    }
}/* End of MainActivity */

开始和停止按钮是指GPSexp.java中定义的GPSexp.class,它可以正常工作。问题出在MapViewer.java

MapViewer.java

package Firstdroid.Gps;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
public class MapViewer extends MapActivity {

    MapView myMap;
    MyLocationOverlay myLocOverlay;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);

        initMap();
        initMyLocation();
    }

    private void initMap() {
        myMap = (MapView) findViewById(R.id.mymap);

        View zoomView = myMap.getZoomControls();
        LinearLayout myzoom = (LinearLayout) findViewById(R.id.myzoom);
        myzoom.addView(zoomView);
        myMap.displayZoomControls(true);

    }

    /**
     * Initialises the MyLocationOverlay and adds it to the overlays of the map
     */
    private void initMyLocation() {
        myLocOverlay = new MyLocationOverlay(this, myMap);
        myLocOverlay.enableMyLocation();
        myMap.getOverlays().add(myLocOverlay);

    }

    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}

logcat的

06-30 04:25:07.519: WARN/dalvikvm(357): Unable to resolve superclass of LFirstdroid/Gps/MapViewer; (37)
06-30 04:25:07.519: WARN/dalvikvm(357): Link of class 'LFirstdroid/Gps/MapViewer;' failed
06-30 04:25:07.547: ERROR/dalvikvm(357): Could not find class 'Firstdroid.Gps.MapViewer', referenced from method Firstdroid.Gps.MainActivity$2.onClick
06-30 04:25:07.547: WARN/dalvikvm(357): VFY: unable to resolve const-class 8 (LFirstdroid/Gps/MapViewer;) in LFirstdroid/Gps/MainActivity$2;
06-30 04:25:07.559: DEBUG/dalvikvm(357): VFY: replacing opcode 0x1c at 0x000d
06-30 04:25:07.573: DEBUG/dalvikvm(357): VFY: dead code 0x000f-0015 in LFirstdroid/Gps/MainActivity$2;.onClick (Landroid/view/View;)V
06-30 04:25:07.909: INFO/ActivityManager(58): Displayed activity Firstdroid.Gps/.MainActivity: 1828 ms (total 1828 ms)
06-30 04:25:13.180: DEBUG/dalvikvm(129): GC_EXPLICIT freed 670 objects / 38560 bytes in 169ms
06-30 04:25:13.840: DEBUG/Firstdroid.Gps(357): Loading Map..
06-30 04:25:13.850: DEBUG/AndroidRuntime(357): Shutting down VM
06-30 04:25:13.850: WARN/dalvikvm(357): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-30 04:25:13.880: ERROR/AndroidRuntime(357): FATAL EXCEPTION: main
06-30 04:25:13.880: ERROR/AndroidRuntime(357): java.lang.NoClassDefFoundError: Firstdroid.Gps.MapViewer
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at Firstdroid.Gps.MainActivity$2.onClick(MainActivity.java:40)
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at android.view.View.performClick(View.java:2408)
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at android.view.View$PerformClick.run(View.java:8816)
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at android.os.Handler.handleCallback(Handler.java:587)
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at android.os.Looper.loop(Looper.java:123)
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at java.lang.reflect.Method.invokeNative(Native Method)
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at java.lang.reflect.Method.invoke(Method.java:521)
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-30 04:25:13.880: ERROR/AndroidRuntime(357):     at dalvik.system.NativeStart.main(Native Method)
06-30 04:25:13.900: WARN/ActivityManager(58):   Force finishing activity Firstdroid.Gps/.MainActivity
06-30 04:25:14.450: WARN/ActivityManager(58): Activity pause timeout for HistoryRecord{44fe90c0 Firstdroid.Gps/.MainActivity}
06-30 04:25:15.750: INFO/Process(357): Sending signal. PID: 357 SIG: 9
06-30 04:25:15.841: INFO/ActivityManager(58): Process Firstdroid.Gps (pid 357) has died.
06-30 04:25:15.880: INFO/WindowManager(58): WIN DEATH: Window{4500c988 Firstdroid.Gps/Firstdroid.Gps.MainActivity paused=false}

2 个答案:

答案 0 :(得分:2)

您添加了uses-library作为activity元素的子元素......也许这就是问题所在。

  

这不是标准包中的   Android库。为了使用它,   您必须添加以下XML   元素,作为孩子的   应用程序元素,位于AndroidManifest.xml文件中:

<uses-library android:name="com.google.android.maps" />

答案 1 :(得分:0)

您正在使用startService启动MapViewer 活动。希望有所帮助