2014-04-13 3 views
3

Я пытаюсь сделать что-то вроде этого: Android Map api v2 Custom marker with ImageView Но я застрял на использовании загрузчика изображений.Как загрузить изображение с помощью Universal ImageLoader без отображения

Попытка:

Bitmap bmImg = imageLoader.loadImageSync(url); 

LogCat дает мне

04-13 14:11:44.953: E/ImageLoader(18542): android.os.NetworkOnMainThreadException 

Вот мой код. У меня есть камера ArrayList со всей необходимой информацией (титр, позиция, url и т. Д.).

public void drawPicsOnMap() 
{      
    String title = null; 
    String place = null;   
    for (int i = 0; i<camera.size(); i++) 
    { 
     Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
     Bitmap bmp = Bitmap.createBitmap(80, 80, conf); 
     Canvas canvas = new Canvas(bmp); 

     // paint defines the text color, 
     // stroke width, size 
     Paint color = new Paint(); 
     color.setTextSize(35); 
     color.setColor(Color.BLACK); 

     Camera cam = camera.get(i); 
     LatLng coord = new LatLng(cam.lat, cam.lon); 

     title = Integer.toString(cam.id); 
     place = cam.place;         

     String url = cam.img; 
     Bitmap bmImg = imageLoader.loadImageSync(url); 

     //modify canvas 
     canvas.drawBitmap(bmImg, 0,0, color); 
     canvas.drawText(title, 30, 40, color); 

     Marker mark = map.addMarker(new MarkerOptions() 
     .position(coord) 
     .title(title) 
     .snippet(place) 
     .icon(BitmapDescriptorFactory 
       .fromBitmap(bmp))); 

     markers.put(mark.getId(), url); 
    } 
} 

ответ

5

Попробуйте это:

imageLoader.loadImage(url, new SimpleImageLoadingListener(){ 

        @Override 
        public void onLoadingComplete(String imageUri, View view, 
          Bitmap loadedImage) { 
        super.onLoadingComplete(imageUri, view, loadedImage); 

         //write your code here to use loadedImage 
        } 

       }); 

Здесь onLoadingComplete будет называться на UI потоке, что делает его поточно

+0

Я сделал Bitmap bmImg = null и вызывается imageLoader.loadImage(), что вы написали. Внутри onLoadingComplete я написал bmImg = loadedImage. Теперь LogCat сообщает мне java.lang.NullPointerException –

+0

Вы используете bmImg перед вызовом функции onLoadingComplete. – Shahidul

+0

Помните, что onLoadingComplete вызывается всякий раз, когда изображение загрузка завершена, так как для загрузки изображения потребуется некоторое время, поэтому вы не можете получить и использовать Bitmap до того, как вызывается onLoadingComplete. – Shahidul

0

Вы не можете создавать сети по основному потоку. See for description. UIL обычно создает поток и прочее для вас, когда вы вызываете displayImage, но loadImageSync этого не делает. Либо создайте поток, либо загрузите его, либо используйте AsynTask.

+0

Существует UIL.loadImage (String Ури ImageLoadingListener слушатель), который не работает на главной нить. Но я не могу получить растровое изображение отсюда :( –

+0

Сделайте что-то вроде этого: создайте задачу async и загрузите растровое изображение в doInBackground, передайте растровое изображение методу onPostExecute, затем установите маркер с этим растровым изображением. – KennyC

Смежные вопросы