我有一个微调器允许我选择公司类型:汽车中心与卡车中心。
我从JSON中提取地址并在AsyncTask中使用地图标记显示它们。当我使用下面的代码时没有做,而地图显示所有标记,无论公司类型如何。因此,当JSON中的公司是“汽车中心”时,我决定包含一个do while循环来添加地图对象。我也会用“卡车中心”做同样的事。
我的问题是do while循环根本没有标记显示在地图上,但没有do while循环显示所有标记。
do {
data1 = new LocationData(lati, longi, nameFirst1 + " " + nameLast1,otherinfo);
}
while (company1.equals("Car Center"));
locationList.add(data1);
if (str.equals("Car Center")) {
publishProgress(data1);
}else {}
}
public LocationData onProgressUpdate(LocationData data1 ) {
return data1;
}
protected void onPostExecute(Long result) {
for(LocationData data1 : locationList){
mMap.addMarker(new MarkerOptions()
.position(new LatLng(data1.getLat(), data1.getLongitude()))
.title(data1.getName())
.snippet(data1.getOther()));
}
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
str =(String)arg0.getSelectedItem();
Log.d("Spinner choice", str);
}
答案 0 :(得分:1)
由于您尚未发布所有AsyncTask,因此要判断出错是不容易的。例如:
如果您在处理过程中会发生什么? 假设在JSON
中为所有获取的公司重写了company1if (company1.equals("Car Center")) {{
locationList.add(new LocationData(lati, longi, nameFirst1 + " " + nameLast1,otherinfo));
publishProgress(data1);
}
否则,用伪代码编写:
fetch all companies
int totalCompanies = companies.size();
int progress = 0;
for all companies {
progress++;
if company equals("Car Center") {
locationList.add(new LocationData(lati, longi, nameFirst1 + " " + nameLast1,otherinfo));
// you do not have to use publishProgress
// but if you do I though giving a percentage of progress instead of data1 makes sense
publishProgress((progress/totalCompanies)*100);
}
}
我怀疑通过使用while循环你根本得不到任何标记,可能是因为第一个元素不等于Car Center,这使得while循环停止。
我仍然对你的代码感到困惑,因为好像你为每个公司使用一个新的AsyncTask,只有一个元素,然后你抛出一个while循环。很可能是我错过了一些东西,如果以上内容没有帮助,我们会很乐意提出更多建议。
然后我只需要你发布完整的代码,以便我理解它背后的逻辑。