0

我在我的 MapActivity 中创建了一个异步任务,它是:

class ReadLocations extends AsyncTask<String, String, String> {

    GeoPoint apoint1;
    GeoPoint apoint2;
    ArrayList<GeoPoint> Locations = new ArrayList<GeoPoint>(); 


    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pDialog = new ProgressDialog(MyMapLocationActivity.this);
        pDialog.setMessage("DONE");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();


    }

    protected String doInBackground(String... args) {

        return null; 
    }


    protected void onPostExecute() {
        // dismiss the dialog once done
        pDialog.dismiss();

    }

}

我正在尝试以这种方式执行它:

public class MyMapLocationActivity extends MapActivity {

private MapView mapView;
private ProgressDialog pDialog;  
private ProgressDialog eDialog;  


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

ReadLocations Read = new ReadLocations();
Read.execute();

 ...

我的控制对话框永远不会消失 - 似乎我的 onPostExecute 方法没有被调用 - 为什么会这样?

4

3 回答 3

1

Becoz,您的 AsyncTaskonPostExecute()没有参数。这是返回的doInBackground()

所以正确覆盖这两种方法。

就像是,

@Override
protected String doInBackground(String... args) {  // Return type of same as argument of onPostExecute() 
    return null; 
}

@Override
protected void onPostExecute(String result) { // Add String argument in onPostExecute()
    // dismiss the dialog once done
    pDialog.dismiss();
}

的执行尽可能doInBackground()快,因为其中没有任何其他工作实现。只有一个回报声明..

于 2012-09-19T08:35:56.977 回答
1

您没有正确覆盖 onPostExecute,缺少结果参数

它应该是这样的

@Override
protected void onPostExecute(String result) {
    // dismiss the dialog once done
    pDialog.dismiss();
}
于 2012-09-19T08:36:55.673 回答
0

在 Eclipse 中,正确覆盖或实现超类方法的最佳和最简单的方法是:

  1. 将光标聚焦在您的AsyncTask身体上。然后mouse right click--> source--> override/implement methods
  2. 选择必要的方法。
  3. 单击确定。方法将自动添加到您的类中。

您也可以通过这种方式生成构造函数、getter/setter 等。

于 2012-09-19T09:22:57.170 回答