0

会社の種類を選択できるスピナーがあります: カー センターとトラック センター。

JSON から住所を取得し、AsyncTask でマップ マーカーと共に表示します。会社の種類に関係なく、マップにすべてのマーカーが表示されているときに、do なしで以下のコードを使用すると。そのため、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);           
} 
4

1 に答える 1

1

すべての AsyncTask を投稿していないため、何が問題なのかを判断するのは簡単ではありません。例えば:

  • company1を取得して書き込む方法
  • strはいつ書かれるか

処理中に単純に行うとどうなりますか? JSON でフェッチされたすべての会社に対して company1 が書き直されたと仮定します。

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 を使用し、要素が 1 つしかなく、その後 while ループをスローするように見えるため、私はまだあなたのコードについて少し混乱しています。私が何かを見逃している可能性が非常に高く、上記が役に立たない場合は喜んでより多くの提案をします.

次に、その背後にあるロジックを理解するために、完全なコードを投稿する必要があります.

于 2013-10-17T20:49:00.453 に答える