2015-05-12 135 views
1

我正在动态创建Imageviews并显示它。但我面临重新加载问题时滚动,所以我决定使用NetworkImageView,但在这里我无法设置位图。它没有显示任何错误,但没有显示任何图像。 下面我的代码...将位图设置为NetworkImageView

final NetworkImageView imageView = new NetworkImageView(context); 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 
      200); 
    params.weight = 1; 
    //imageView.setImageBitmap(null); 
    imageView.setLayoutParams(params); 
    imageView.setMaxHeight(200); 
    imageView.setMaxWidth(150); 
    // bitmap =// 
    // BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_menu_folder); 
    // Log.i("Bitmaps Counts", String.valueOf(pos)); 
    /* comment all this... 
    new Thread() { 
     public void run() { 


       bitmap = downloadImage(tempValues.getItemAbsolutePath()); 


      ((Activity) context).runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 

        imageView.setImageBitmap(bitmap); 

       } 
      }); 

     } 
    }.start();*/ 
    RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); 
    ImageLoader mImageLoader = new ImageLoader(requestQueue,new LruBitmapCache(1000000)); 
    mImageLoader.get(tempValues.getItemAbsolutePath(), 
      ImageLoader.getImageListener(imageView, 
        R.android.defaultimg, 
        R.android.errorimg)); 

    layout.addView(imageView); 

downloadImage代码..

/* unused method 
     private Bitmap downloadImage(String url) { 
     Bitmap bitmap = null; 
     InputStream stream = null; 
     BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
     bmOptions.inSampleSize = 1; 

     try { 
      stream = getHttpConnection(url); 
      bitmap = BitmapFactory.decodeStream(stream, null, bmOptions); 
      stream.close(); 

     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     return bitmap; 
    } 

    private InputStream getHttpConnection(String urlString) throws IOException { 
     InputStream stream = null; 
     URL url = new URL(urlString); 
     URLConnection connection = url.openConnection(); 

     try { 
      HttpURLConnection httpConnection = (HttpURLConnection) connection; 
      httpConnection.setRequestMethod("GET"); 
      httpConnection.connect(); 

      if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       stream = httpConnection.getInputStream(); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return stream; 
    }*/ 

错误日志

05-12 19:11:13.971:E/AndroidRuntime(11177):致命异常:螺纹-7325 05-12 19:11:13.971:E/AndroidRuntime(11177):进程:com.dar.app,PID:11177 05-12 19:11:13.971:E/AndroidRuntime(11177):java.lang .NegativeArraySizeException:-350 05-12 19:11:13.971:E/AndroidRun time(11177):at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:316) 05-12 19:11:13.971:E/AndroidRuntime(11177):at com.android.volley.toolbox。 DiskBasedCache.get(DiskBasedCache.java:117) 05-12 19:11:13.971:E/AndroidRuntime(11177):在com.android.volley.CacheDispatcher.run(CacheDispatcher.java:100)

+0

我是新至Android至少请指导我 – Mister

+0

好吧,看我的答案 –

+0

请我更新的代码和我在做什么我是creati动态地传递给持有者。下面的代码我不明白 – Mister

回答

1

可以使用凌空图像downloder

很容易 默认IMG设置...用于图像加载器请求.. 如果使用URL找到图像它将设置..或者如果出错,将设置错误image..this方式,您可以通知有关加载IMG错误

RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); 
ImageLoader mImageLoader = new ImageLoader(requestQueue,new LruBitmapCache(1000000)); 
mImageLoader.get(<img-url>, 
       ImageLoader.getImageListener(<imageview-object>, 
         R.drawable.defaultimg, 
         R.drawable.errorimg)); 
+0

ü可以编辑我的代码 – Mister

+0

@Mister如果编辑的代码work..then我会更新我的答案..to接受这个问题的答案...多数民众赞成在未来其他发现很容易 –

+0

R.android.defaultimg为Android我得到错误 – Mister

1

FINAL CODE

public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
    private ImageView imageView; 
    private Bitmap image; 
    private LinearLayout linear; 

    public DownloadImageTask(ImageView imageView, LinearLayout linear) { 
     this.imageView = imageView; 
     this.linear = linear; 
    } 

    protected Bitmap doInBackground(String... urls) { 
     String urldisplay = urls[0]; 
     try { 
      InputStream in = new java.net.URL(urldisplay).openStream(); 
      image = BitmapFactory.decodeStream(in); 
     } catch (Exception e) { 
      image = null; 
     } 
     return image; 
    } 

    @SuppressLint("NewApi") 
    protected void onPostExecute(Bitmap result) { 
     if (result != null) { 
      imageView.setImageBitmap(result); 
      linear.addView(imageView); 
     } 
    } 
} 

现在,在你的代码中调用:

final ImageView imageView = new ImageView(context); 
final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 200); 
params.weight = 1; 
imageView.setLayoutParams(params); 
imageView.setMaxHeight(200); 
imageView.setMaxWidth(150); 

new DownloadImageTask(imageView, layout).execute(tempValues.getItemAbsolutePath());