找不到课程' com.esri.android.map.ags.ArcGISLocalTiledLayer'

时间:2015-01-29 10:52:42

标签: java android eclipse arcgis

即使在代码中导入类文件,也会显示该文件丢失。任何人都可以帮助我。

我正在尝试在Eclipse上运行ArcGIS示例代码文件。

此特定代码适用于OfflineRoutingAndGeocoding。

以下是错误

01-29 06:46:55.086: E/Trace(2512): error opening trace file: No such file or directory (2)
01-29 06:46:55.086: E/Trace(2512): error opening trace file: No such file or directory (2)
01-29 06:46:55.298: E/dalvikvm(2512): Could not find class 'com.esri.android.map.ags.ArcGISLocalTiledLayer', referenced from method com.esri.arcgis.android.samples.offlineroutingandgeocoding.RoutingAndGeocoding.<init>
01-29 06:46:55.449: E/dalvikvm(2512): Could not find class 'com.esri.android.map.MapView', referenced from method com.esri.arcgis.android.samples.offlineroutingandgeocoding.RoutingAndGeocoding.onCreate
01-29 06:46:55.556: E/AndroidRuntime(2512): FATAL EXCEPTION: main
01-29 06:46:55.556: E/AndroidRuntime(2512): java.lang.NoClassDefFoundError: com.esri.android.map.ags.ArcGISLocalTiledLayer
01-29 06:46:55.556: E/AndroidRuntime(2512):     at com.esri.arcgis.android.samples.offlineroutingandgeocoding.RoutingAndGeocoding.<init>(RoutingAndGeocoding.java:57)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at java.lang.Class.newInstanceImpl(Native Method)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at java.lang.Class.newInstance(Class.java:1319)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at android.os.Looper.loop(Looper.java:137)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at android.app.ActivityThread.main(ActivityThread.java:5041)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at java.lang.reflect.Method.invokeNative(Native Method)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at java.lang.reflect.Method.invoke(Method.java:511)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-29 06:46:55.556: E/AndroidRuntime(2512):     at dalvik.system.NativeStart.main(Native Method)

这是RoutingAndGeocoding.java

package com.esri.arcgis.android.samples.offlineroutingandgeocoding;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;

    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemSelectedListener;
    import android.widget.ArrayAdapter;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Toast;

    import com.esri.android.map.GraphicsLayer;
    import com.esri.android.map.GraphicsLayer.RenderingMode;
    import com.esri.android.map.MapOnTouchListener;
    import com.esri.android.map.MapView;
    import com.esri.android.map.TiledLayer;
    import com.esri.android.map.ags.ArcGISLocalTiledLayer;
    import com.esri.core.geometry.Geometry;
    import com.esri.core.geometry.Point;
    import com.esri.core.geometry.SpatialReference;
    import com.esri.core.map.Graphic;
    import com.esri.core.symbol.SimpleLineSymbol;
    import com.esri.core.symbol.SimpleMarkerSymbol;
    import com.esri.core.symbol.SimpleMarkerSymbol.STYLE;
    import com.esri.core.tasks.geocode.Locator;
    import com.esri.core.tasks.geocode.LocatorReverseGeocodeResult;
    import com.esri.core.tasks.na.NAFeaturesAsFeature;
    import com.esri.core.tasks.na.Route;
    import com.esri.core.tasks.na.RouteDirection;
    import com.esri.core.tasks.na.RouteParameters;
    import com.esri.core.tasks.na.RouteResult;
    import com.esri.core.tasks.na.RouteTask;
    import com.esri.core.tasks.na.StopGraphic;

    public class RoutingAndGeocoding extends Activity {

        // Define ArcGIS Elements
        MapView mMapView;
        final String extern = Environment.getExternalStorageDirectory().getPath();
        //     /ArcGIS/samples/OfflineRouting/SanDiego.tpk
        //      D:/mobile gis/installs/z/arcgis-android-sdk-v10.2/arcgis-android-sdk-v10.2/samples/Routing-Navigation/OfflineRoutingAndGeocoding/OfflineRouting/SanDiego.tpk
        //      file:///mnt/sdcard/Parcels/v101/Parcel Map
        final String tpkPath = "file:///mnt/sdcard/SanDiego.tpk";
        TiledLayer mTileLayer = new ArcGISLocalTiledLayer(extern + tpkPath);
        GraphicsLayer mGraphicsLayer = new GraphicsLayer(RenderingMode.DYNAMIC);

        RouteTask mRouteTask = null;
        NAFeaturesAsFeature mStops = new NAFeaturesAsFeature();

        Locator mLocator = null;
        View mCallout = null;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_routing_and_geocoding);

            // Retrieve the map and initial extent from XML layout
            mMapView = (MapView) findViewById(R.id.map);

            // Set the tiled map service layer and add a graphics layer
            mMapView.addLayer(mTileLayer);
            mMapView.addLayer(mGraphicsLayer);

            // Initialize the RouteTask and Locator with the local data
            initializeRoutingAndGeocoding();
            mMapView.setOnTouchListener(new TouchListener(RoutingAndGeocoding.this,
                    mMapView));
        }

        private void initializeRoutingAndGeocoding() {

            // We will spin off the initialization in a new thread
            new Thread(new Runnable() {

                @Override
                public void run() {
                    // Get the external directory
                    //       /ArcGIS/samples/OfflineRouting/Geocoding/SanDiego_StreetAddress.loc
                    //      D:/mobile_gis/installs/z/OfflineRouting/Geocoding/SanDiego_StreetAddress.loc
                    String locatorPath = "file:///mnt/sdcard/SanDiego_StreetAddress.loc";
                    //       /ArcGIS/samples/OfflineRouting/Routing/RuntimeSanDiego.geodatabase
                    //      D:/mobile_gis/installs/z/OfflineRouting/Routing/RuntimeSanDiego.geodatabase
                    String networkPath = "file:///mnt/sdcard/RuntimeSanDiego.geodatabase";
                    String networkName = "Streets_ND";

                    // Attempt to load the local geocoding and routing data
                    try {
                        mLocator = Locator.createLocalLocator(extern + locatorPath);
                        mRouteTask = RouteTask.createLocalRouteTask(extern
                                + networkPath, networkName);
                    } catch (Exception e) {
                        popToast("Error while initializing :" + e.getMessage(),
                                true);
                        e.printStackTrace();
                    }
                }
            }).start();
        }

        class TouchListener extends MapOnTouchListener {

            private int routeHandle = -1;

            @Override
            public void onLongPress(MotionEvent point) {
                // Our long press will clear the screen
                mStops.clearFeatures();
                mGraphicsLayer.removeAll();
                mMapView.getCallout().hide();
            }

            @Override
            public boolean onSingleTap(MotionEvent point) {

                if(mLocator == null){
                    popToast("Locator uninitialized", true);
                    return super.onSingleTap(point);
                }else{
                    // Add a graphic to the screen for the touch event
                    Point mapPoint = mMapView.toMapPoint(point.getX(), point.getY());
                    Graphic graphic = new Graphic(mapPoint, new SimpleMarkerSymbol(
                            Color.BLUE, 10, STYLE.DIAMOND));
                    mGraphicsLayer.addGraphic(graphic);

                    String stopAddress = "";
                    try {
                        // Attempt to reverse geocode the point.
                        // Our input and output spatial reference will 
                        // be the same as the map.
                        SpatialReference mapRef = mMapView.getSpatialReference();
                        LocatorReverseGeocodeResult result = mLocator.reverseGeocode(
                                mapPoint, 50, mapRef, mapRef);

                        // Construct a nicely formatted address from the results
                        StringBuilder address = new StringBuilder();
                        if (result != null && result.getAddressFields() != null) {
                            Map<String, String> addressFields = result
                                    .getAddressFields();
                            address.append(String.format("%s\n%s, %s %s",
                                    addressFields.get("Street"),
                                    addressFields.get("City"),
                                    addressFields.get("State"),
                                    addressFields.get("ZIP")));
                        }

                        // Show the results of the reverse geocoding in 
                        // the map's callout.
                        stopAddress = address.toString();
                        showCallout(stopAddress, mapPoint);

                    } catch (Exception e) {
                        Log.v("Reverse Geocode", e.getMessage());
                    }

                    // Add the touch event as a stop
                    StopGraphic stop = new StopGraphic(graphic);
                    stop.setName(stopAddress.toString());
                    mStops.addFeature(stop);

                    return true;
                }
            }

            @Override
            public boolean onDoubleTap(MotionEvent point) {

                // Return default behavior if we did not initialize properly.
                if (mRouteTask == null) {
                    popToast("RouteTask uninitialized.", true);
                    return super.onDoubleTap(point);
                }

                try {

                    // Set the correct input spatial reference on the stops and the
                    // desired output spatial reference on the RouteParameters object.
                    SpatialReference mapRef = mMapView.getSpatialReference();
                    RouteParameters params = mRouteTask
                            .retrieveDefaultRouteTaskParameters();
                    params.setOutSpatialReference(mapRef);
                    mStops.setSpatialReference(mapRef);

                    // Set the stops and since we want driving directions,
                    // returnDirections==true
                    params.setStops(mStops);
                    params.setReturnDirections(true);

                    // Perform the solve
                    RouteResult results = mRouteTask.solve(params);

                    // Grab the results; for offline routing, there will only be one
                    // result returned on the output.
                    Route result = results.getRoutes().get(0);

                    // Remove any previous route Graphics
                    if (routeHandle != -1)
                        mGraphicsLayer.removeGraphic(routeHandle);

                    // Add the route shape to the graphics layer
                    Geometry geom = result.getRouteGraphic().getGeometry();
                    routeHandle = mGraphicsLayer.addGraphic(new Graphic(geom,
                            new SimpleLineSymbol(0x99990055, 5)));
                    mMapView.getCallout().hide();

                    // Get the list of directions from the result
                    List<RouteDirection> directions = result.getRoutingDirections();

                    // Find the directions spinner
                    Spinner dSpinner = (Spinner) findViewById(R.id.directionsSpinner);

                    // Iterate through all of the individual directions items and
                    // create a nicely fomatted string for each.
                    List<String> formattedDirections = new ArrayList<String>();
                    for (int i = 0; i < directions.size(); i++) {
                        RouteDirection direction = directions.get(i);
                        formattedDirections.add(String.format(
                                "%s\nGo %.2f %s For %.2f Minutes", direction.getText(),
                                direction.getLength(), params
                                        .getDirectionsLengthUnit().name(),
                                direction.getMinutes()));
                    }

                    // Add a summary String
                    formattedDirections.add(
                            0,
                            String.format("Total time: %.2f Mintues",
                                    result.getTotalMinutes()));

                    // Create a simple array adapter to visualize the directions in
                    // the Spinner
                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                            getApplicationContext(),
                            android.R.layout.simple_spinner_item,
                            formattedDirections);
                    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    dSpinner.setAdapter(adapter);

                    // Add a custom OnItemSelectedListener to the spinner to allow
                    // panning to each directions item.
                    dSpinner.setOnItemSelectedListener(new DirectionsItemListener(
                            directions));

                } catch (Exception e) {
                    popToast("Solve Failed: " + e.getMessage(), true);
                    e.printStackTrace();
                }
                return true;
            }

            public TouchListener(Context context, MapView view) {
                super(context, view);
            }
        }

        class DirectionsItemListener implements OnItemSelectedListener {

            private List<RouteDirection> mDirections;

            public DirectionsItemListener(List<RouteDirection> directions) {
                mDirections = directions;
            }

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int pos,
                    long id) {
                // We have to account for the added summary String
                if (mDirections != null && pos > 0 && pos <= mDirections.size())
                    mMapView.setExtent(mDirections.get(pos - 1).getGeometry());
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
            }
        }

        private void showCallout(String text, Point location) {

            // If the callout has never been created, inflate it
            if (mCallout == null) {
                LayoutInflater inflater = (LayoutInflater) getApplication()
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                mCallout = inflater.inflate(R.layout.callout, null);
            }

            // Show the callout with the given text at the given location
            ((TextView) mCallout.findViewById(R.id.calloutText)).setText(text);
            mMapView.getCallout().show(location, mCallout);
            mMapView.getCallout().setMaxWidth(700);
        }

        private void popToast(final String message, final boolean show) {
            // Simple helper method for showing toast on the main thread
            if (!show)
                return;

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(RoutingAndGeocoding.this, message,
                            Toast.LENGTH_SHORT).show();
                }
            });
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.routing_and_geocoding, menu);
            return true;
        }

    }

0 个答案:

没有答案