2012-09-19 114 views
0

我已经在我的MapActivity创建的AsyncTask,那就是:为什么我的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方法不被调用 - 为什么?

回答

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()执行的是快速的,因为没有在任何其他的工作落实。只有一个return语句..

+0

我也想说,如果签名是正确的,你也不会看到对话框,因为它已经被解雇了,然后才能正确绘制。你(OP)应该添加一些实际工作或在doInBackground中测试睡眠。 – Fildor

1

你没有正确重写onPostExecute,结果参数缺少

它应该是这样的

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

你应该添加@Override注解。它会告诉你,第一个地方出了问题。 :-) – Albin

0
在Eclipse中最好

和最简单的方式覆盖或实现超类正确的方法是:

  1. 将焦点放在您的AsyncTask正文上。然后mouse right clicksourceoverride/implement methods
  2. 选择必要的方法。
  3. 单击确定。方法会自动添加到你的班级中。

你也可以这样生成构造函数,getter/setter等。

相关问题