2014-04-13 86 views
3

我试图做这样的事情: Android Map api v2 Custom marker with ImageView 但我坚持使用图像加载器。如何使用通用ImageLoader加载图像而不显示

尝试:

Bitmap bmImg = imageLoader.loadImageSync(url); 

logcat的给我

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

这里是我的代码。我有一个ArrayList相机,包含所有需要的信息(titrle,position,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

我做了位图bmImg = null ;并调用imageLoader.loadImage()你写的内部onLoadingComplete我写了bmImg = loadedImage。现在LogCat告诉我java.lang.NullPointerException –

+0

你正在使用bmImg之前onLoadingComplete函数被调用 – Shahidul

+0

记住onLoadingComplete被称为每当图像下载完成,因为下载图片需要花费一些时间,所以在onLoadingComplete被调用之前,你无法获得并使用Bitmap – Shahidul

0

您无法在主线程上进行任何联网。 See for description。当您调用displayImage时,UIL通常会为您创建线程和内容,但loadImageSync不会。创建一个线程并加载它或使用AsynTask。

+0

有UIL.loadImage(字符串URI,ImageLoadingListener听众)不上的主要工作线。但我不能从那里得到位图:( –

+0

做这样的事情:创建一个异步任务,并在doInBackground中加载位图,将位图传递给onPostExecute方法,然后用该位图设置标记 – KennyC

相关问题