为什么我的AsyncTask没有完成?

时间:2012-09-19 08:33:27

标签: android android-asynctask

我在MapActivity中创建了一个asynctask,这里是:

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方法没有被调用 - 为什么会这样?

3 个答案:

答案 0 :(得分:1)

Becoz,你的AsyncTask的onPostExecute()没有参数。这是doInBackground()返回的。

SO正确覆盖两种方法。

类似的东西,

@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()的速度很快,因为其中没有任何其他工作实现。只有一个退货声明..

答案 1 :(得分:1)

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

应该是

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

答案 2 :(得分:0)

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

  1. 将光标对准AsyncTask身体。然后mouse right click - &gt; source - &gt; override/implement methods
  2. 选择必要的方法。
  3. 单击“确定”。方法会自动添加到您的班级中。
  4. 此外,您可以通过这种方式生成构造函数,getter / setter等。