0

我有一个微调器,可以让我选择公司类型:汽车中心与卡车中心。

我从 JSON 中提取地址并在 AsyncTask 中使用地图标记显示它们。当我使用下面的代码时,无论公司类型如何,地图都会显示所有标记。所以我决定包含一个 do while 循环来添加地图对象,而 JSON 中的公司是“汽车中心”。我也会对“卡车中心”做同样的事情。

我的问题是 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);           
} 
4

1 回答 1

1

由于您尚未发布所有 AsyncTask,因此很难判断出什么问题。例如:

  • company1是如何获取和写入的
  • str什么时候写

如果你在你的处理过程中只是简单地做了会发生什么? 假设 company1 以 JSON 格式为所有获取的公司重写

if (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 循环。很可能是我错过了一些东西,如果上述内容没有帮助,我很乐意提出更多建议。

然后我只需要你发布完整的代码,以便我理解它背后的逻辑。

于 2013-10-17T20:49:00.453 回答