0

我有 Hesham Saeed 编写的代码。我想将方向函数放在 AsyncTask 中,因为它正在使用 Network。我怎么能做到这一点,因为我是 Android 新手。我需要在 AsyncTask 中移动方向..

主要活动代码。

package com.example.googlemaptst;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;

import android.app.ProgressDialog;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;

public class MapsActivity extends MapActivity
{    

/** Called when the activity is first created. */
Button b;
private ProgressDialog pDialog;
private  Route directions(final GeoPoint start, final GeoPoint dest)  {
   Parser parser;
    String jsonURL = "http://maps.google.com/maps/api/directions/json?";
    final StringBuffer sBuf = new StringBuffer(jsonURL);
    sBuf.append("origin=");
    sBuf.append(start.getLatitudeE6()/1E6);
    sBuf.append(',');
    sBuf.append(start.getLongitudeE6()/1E6);
    sBuf.append("&destination=");
    sBuf.append(dest.getLatitudeE6()/1E6);
    sBuf.append(',');
    sBuf.append(dest.getLongitudeE6()/1E6);
    sBuf.append("&sensor=true&mode=driving");
    Log.v("I came in URL", sBuf.toString());
    parser = new GoogleParser(sBuf.toString());
    Route r =  parser.parse();
    return r;
}

@Override
public void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_map);
     MapView mapView = (MapView) findViewById(R.id.mapView); //or you can declare it directly with the API key
     Route route = directions(new GeoPoint((int)(26.2*1E6),(int)(50.6*1E6)), new GeoPoint((int)(26.3*1E6),(int)(50.7*1E6)));
     RouteOverlay routeOverlay = new RouteOverlay(route, Color.BLUE);
     mapView.getOverlays().add(routeOverlay);

}

@Override
protected boolean isRouteDisplayed() {

    return false;
}
}
4

2 回答 2

1

好的,这是你必须做的:

    MapView mapView = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_map);
     mapView = (MapView) findViewById(R.id.mapView); //or you can declare it directly with the API key
     DirectionsTask getDirectionsTask = new DirectionsTask();
     getDirectionsTask.execute(new GeoPoint((int)(26.2*1E6),(int)(50.6*1E6)), new GeoPoint((int)(26.3*1E6),(int)(50.7*1E6)));

}

private class DirectionsTask extends AsyncTask<GeoPoint, Void, Route> {

    protected Route doInBackground(GeoPoint... geoPointParams) {
        GeoPoint start = geoPointParams[0];
        GeoPoint dest = geoPoint[1];

           Parser parser;
            String jsonURL = "http://maps.google.com/maps/api/directions/json?";
            final StringBuffer sBuf = new StringBuffer(jsonURL);
            sBuf.append("origin=");
            sBuf.append(start.getLatitudeE6()/1E6);
            sBuf.append(',');
            sBuf.append(start.getLongitudeE6()/1E6);
            sBuf.append("&destination=");
            sBuf.append(dest.getLatitudeE6()/1E6);
            sBuf.append(',');
            sBuf.append(dest.getLongitudeE6()/1E6);
            sBuf.append("&sensor=true&mode=driving");
            Log.v("I came in URL", sBuf.toString());
            parser = new GoogleParser(sBuf.toString());
            Route r =  parser.parse();
            return r;
    }


}

protected void onPostExecute(Route route) {
    RouteOverlay routeOverlay = new RouteOverlay(route, Color.BLUE);
     mapView.getOverlays().add(routeOverlay);
}

一些评论。将 mapView 放在 OnCreate 之外,以便 onPostExecute 可以访问它。请注意,onPostExecute 在 UI 线程中被调用,所以没关系。

于 2012-09-17T16:28:28.973 回答
0
package Logic;

public class ReadConfig extends AsyncTask<String, Integer, String> {

    public ReadConfig(Context context) {
        this.context = context; 
    }

    protected void onPreExecute() {

        //initialize progressbar
    }

    @Override
    protected String doInBackground(String... params) {

        //do you processing here, or call a method to do it for you.
        return "";
    }

    protected void onPostExecute(String result) {

      //cancel progressdialog and do whatever you need to do after background job has completed
    }
}

这样调用AsyncTask

new ReadConfig(getApplicationContext()).execute("");
于 2012-09-17T13:18:03.837 回答