Я добавляю маркеры для моей карты из URL с помощью Picasso libraryДобавление маркеров из URL с Пикассо
В качестве маркера не ImageView я пытался использовать цели вместо
for(int x =0; x < mapIcon_url.length; x++){
Picasso.with(getActivity()).load(mapIcon_url[x]).resize(marker_size, marker_size+15).into(new Target() {
@Override
public void onSuccess(Bitmap b) {
bitmapMarker = BitmapDescriptorFactory.fromBitmap(b);
//create marker option
if(b != null)
markerOptions = new MarkerOptions().position(marker_position).icon(bitmapMarker));
else
markerOptions = new MarkerOptions().position(marker_position).icon(BitmapDescriptorFactory.fromResource(R.drawable.placeholder_pin)).snippet(String.valueOf(x));
marker = map.addMarker(markerOptions);
}
@Override
public void onError() {
//create marker option
markerOptions = new MarkerOptions().position(marker_position).icon(BitmapDescriptorFactory.fromResource(R.drawable.placeholder_pin)).snippet(String.valueOf(x));
marker = map.addMarker(markerOptions);
}
});
}
I «Я делаю это в цикле, чтобы добавить около 20 маркеров, но я обнаружил, что при первом запуске кода добавляются только 5 или 7 маркеров, поэтому я переключился на использование lib и AsyncTask, как это.
for(int x =0; x < mapIcon_url.length; x++){
new AddMarker().execute(mapIcon_url[x]);
}
public class AddMarker extends AsyncTask<String, Integer, BitmapDescriptor> {
BitmapDescriptor bitmapMarker1;
VenueDetails myVenue;
@Override
protected BitmapDescriptor doInBackground(String... url) {
myUrl = url[0];
try {
bitmapMarker1 = BitmapDescriptorFactory.fromBitmap(Picasso.with(getActivity()).load(myUrl).resize(marker_size, marker_size+15).get());
} catch (IOException e) {
e.printStackTrace();
}
return bitmapMarker1;
}
protected void onPostExecute(BitmapDescriptor icon) {
try {
map.addMarker(new MarkerOptions().position(marker_position).icon(icon)));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Однако я немного волновался, этот метод может дать мне некоторые вопросы, когда у меня есть много маркеров говорят о 100. Мой вопрос был бы это лучший способ сделать это, и если не то, что другие варианты могут Я попробую.
Я хотел бы сосредоточиться на отладке вашего первого подхода. Используйте контрольные точки или протоколирующие операторы, чтобы определить, где вы не можете получить маркеры. – CommonsWare
Я использовал инструкции ведения журнала в методах переопределения onSucess и onError цели, а также перед вызовом класса Picasso. Журналы показали, что внешний вид назывался 20 раз, onSucess назывался несколько раз, а onError никогда не вызывал. –
Джейк только что выпустил Picasso 2.0.0 вчера - вы можете попробовать, если вы еще этого не сделали. В противном случае вы можете попытаться создать воспроизводимый тестовый пример и указать проблему с проектом Picasso. Я не вижу особой проблемы с тем, что у вас есть. – CommonsWare