使用AsyncTask在谷歌地图上显示多个标记

时间:2013-01-06 18:54:32

标签: java android android-asynctask maps

Android中的AsyncTask再次出现问题。

我创建了一个简单的AsyncTask类来在MapView上显示多个标记。但是启动活动,有一个NullPointerException - 我认为这是由MapView引起的......

public class MapDetail extends MapActivity {

// JSON Node names
private static final String TAG_NEWNAME = "name";
private static final String TAG_LONG = "long";
private static final String TAG_LAT = "lat";

// Variablen
private MapController mc;
private List<Overlay> mapOverlays;
private Drawable drawable;
private MapItemizedOverlay itemizedoverlay;
private MapView mapView;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.offers);

    // getting intent data
    Bundle extras = getIntent().getExtras();
    String url = extras.getString("url");

    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);

    mc = mapView.getController();

    mapOverlays = mapView.getOverlays();
    drawable = this.getResources().getDrawable(R.drawable.marker);
    itemizedoverlay = new MapItemizedOverlay(drawable, this);

    new MyAsyncTask().execute(url);

}

这是我的AsyncTask:

public class MyAsyncTask extends AsyncTask<String, Void, MapItemizedOverlay > {


    @Override
    protected MapItemizedOverlay doInBackground(String... params) {
        // Creating JSON Parser instance
        JSONParser jParser = new JSONParser();
        JSONArray locations = jParser.getJSONArrayFromUrl(params[0]);

        for (int i = 0; i < locations.length(); i++) {
            JSONObject c;
        try {
            c = locations.getJSONObject(i);
            // Storing each json item in variable
            String firma = c.getString(TAG_NEWNAME);
            String longitude = c.getString(TAG_LONG);
            String latitude = c.getString(TAG_LAT);
            System.out.println("Kriege ich daten"+longitude+"und"+latitude);
            double x = Double.parseDouble(latitude);
            double y = Double.parseDouble(longitude);


            GeoPoint point = new GeoPoint((int)(x * 1E6),(int)(y * 1E6) );
            OverlayItem overlayitem = new OverlayItem(point, firma, null);
            itemizedoverlay.addOverlay(overlayitem);


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

    }
        System.out.println(itemizedoverlay.toString());
        return itemizedoverlay;
    }

    @Override
    protected void onPostExecute(MapItemizedOverlay result) {
        mapOverlays.add(result);
        mapView.getOverlays().add(result);
        LocationManager myLocationManager;
        LocationListener myLocationListener;            
        myLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        myLocationListener = new MyLocationListener();

        myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,myLocationListener);

        GeoPoint initGeoPoint = new GeoPoint(   (int)(myLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLatitude()*1000000),
                                                (int)(myLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLongitude()*1000000));

        mc.animateTo(initGeoPoint);
        mc.setZoom(6); 
        mapView.invalidate();

    }

}}

我的日志:

    01-06 19:49:23.703: E/AndroidRuntime(6064): FATAL EXCEPTION: main
    01-06 19:49:23.703: E/AndroidRuntime(6064): java.lang.NullPointerException
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at de.main.MapDetail$MyAsyncTask.onPostExecute(MapDetail.java:150)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at de.main.MapDetail$MyAsyncTask.onPostExecute(MapDetail.java:1)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at android.os.AsyncTask.finish(AsyncTask.java:631)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at android.os.Handler.dispatchMessage(Handler.java:99)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at android.os.Looper.loop(Looper.java:137)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at android.app.ActivityThread.main(ActivityThread.java:4745)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at java.lang.reflect.Method.invokeNative(Native Method)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at java.lang.reflect.Method.invoke(Method.java:511)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    01-06 19:49:23.703: E/AndroidRuntime(6064):     at dalvik.system.NativeStart.main(Native Method)

0 个答案:

没有答案