我有Hesham Saeed编写的代码。 我想将方向功能放到AsyncTask中,因为它正在使用网络。 作为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;
}
}

#1楼 票数: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线程中被调用,这样就可以了。

#2楼 票数: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("");

  ask by amit surana translate from so

未解决问题?本站智能推荐:

1回复

创建一个AsyncTask并将代码放入doInBackground方法中

这个问题已经在这里有了答案: Android AsyncTask示例 19答案 我发现以下代码可以执行HTTP POST。 它说我不直接在UI / Main Thread中运行这些代码。 创建一个AsyncTask并将代码放入doInBackground方法中。 如何使其
1回复

使用反射测试asyncTask中的doInBackground()方法

AsyncTask.class中的doInBackground方法的方法签名如下所示: 在带有反射的测试中,它看起来像这样: 但我收到以下错误: 是的,我知道有两种签名相同的方法,所以我正在寻找解决方案。
1回复

如何使用EditText在doInbackGround(AsyncTask)中获取参数?

我想使用3个编辑文本来获取URL中的(ID,名称,家庭)。 我已经做了一个Rest Web服务,现在我想在我的Android应用程序中使用套接字。 下面是我的代码,不断出现错误。 我错过了什么?
2回复

AsyncTask在doInBackground()中崩溃

您会看到我正在尝试在此适配器上加载一些数据,但是无法创建AsyncTask来显示进度对话框。 这是程序的完整代码,它给我错误。 我已完全修改,因此请勿编辑任何UI。 这是显示进度对话框时我们应该做的: 提前非常感谢您=) 日志: 我解决了1612行的问题,这是一个疏忽。
2回复

asynctask没有功能很好doinbackground

这是问题所在,在此之前,我将所有代码放在onCreate()下; 但是加载过程大约需要10秒钟以上的时间,它会显示空白屏幕,直到屏幕完全加载为止。 所以我将一些代码移到了doInBackground。 但是我遇到了onCreate()永远不会发生的问题,现在让我们看一下代码: 这是问题
1回复

如何定期检查AsyncTask的doInBackground()中的isCancelled()并在需要时返回?

我看到并阅读了许多文章和文档。 我知道可以插入一些isCancelled(); 在一些代码块之间。 无法将Url fetching分解成更大的工作量又如何呢? 我尝试了这个虚拟项目以尝试找到解决方案:当asynctask工作时,我想定期检查isCancelled()并跳过doInBac
1回复

AsyncTask:doInBackground忙时使用什么?

我必须在我的应用程序中共享图像。 我使用上面的代码片段将URL转换为位图,并且在资源准备好后,我调用startShareImageTask创建文件。 startShareImageTask看起来像这样: 一切都很好,但是我的应用程序需要在后台任务中记录一些东西,当它完成时,直到完成记
1回复

我在AsyncTask的doInBackground()中收到错误

我在位于asyncTask的doInBackground()部分的AsyncHttpClient部分中得到错误。 如何摆脱错误? 错误接收行如下所示。 错误:执行doInBackground()时发生错误 kelimeGetir(sorgu) 错误在此处输入图片描述 在此处