我有一种方法searchPlace()
可以static Arrays
使用谷歌地图更新 A 类(FindItOnMap)中的自定义地点对象,以及updateMap()
更新各种地理点的方法。我调用这些方法Button.onClick
并且一切正常。
由于这些方法使用互联网数据,因此此操作可能需要一段时间,我一直在寻找YourCustomAsyncTask
类 A 内部的内部类 B() 的实现,该类扩展AsyncTask
以在处理这两种方法期间显示等待对话框
一位用户以这种形式提出了一个解决方案(这显然似乎有效):
public class FindItOnMap extends MapActivity {
static Place[] foundResults;
private ProgressDialog dialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ricerca_condominio);
mapView = (MapView)findViewById(R.id.mapView);
...........
((ImageButton) findViewById(R.id.btSearch)).setOnClickListener(mSearchListenerListener);
}
OnClickListener mSearchListener = new OnClickListener() {
public void onClick(View v) {
String location=editorLocation.getText().toString();
String name=editorName.getText().toString();
//Call the AsyncTask here
new YourCustomAsyncTask().execute(new String[] {name, location});
}
};
private class YourCustomAsyncTask extends AsyncTask <String, Void, Void> {
@Override
protected void onPreExecute() {
dialog = new ProgressDialog(Main.this);
dialog.setMessage("Loading....");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.show(); //Maybe you should call it in ruinOnUIThread in doInBackGround as suggested from a previous answer
}
@Override
protected Void doInBackground(String... strings) {
try {
search(strings[0], string[1]);
return null;
} catch(Exception e) {
}
}
@Override
protected void onPostExecute(Void params) {
updateMapWithResult();
dialog.dismiss();
//result
}
.....
}
显示等待对话框并在后台调用方法,但是由于某种奇怪的原因,静态列表foundResults
结果充满了各种null
项目......
这怎么可能?
如果我在内部类之外调用方法 search(location, name) 都可以正常工作并updateMapWithResult();
更新所有地理点,所以这两种方法都可以。只有当我尝试在内部类中调用它时,json 调用似乎正在工作,但静态变量foundResults
充满了null
元素并且程序无法正常工作。
有什么建议吗?