2012-07-19 84 views
4

我试图将从web下载的图像存储到内部存储器。我是指以下解决方案android - storing image cache in internal memory and reusing itandroid-在内部存储器中存储图像

但仍然我得到异常:

07-19 12:05:47.729: E/AndroidRuntime(341): java.lang.IllegalArgumentException: File /data/data/com.yellow.activity/files/-1717792749 contains a path separator 

如何从文件路径载入图片: 这里是我的代码。 图片是一个URL的数组列表。

File fileWithinMyDir = getApplicationContext().getFilesDir(); 
for(int i=0; i<image.size();i++){ 
       String filename = String.valueOf(image.get(i).hashCode()); 
       String urlString = image.get(i); 
       String PATH = fileWithinMyDir.getAbsolutePath() + "/" +filename; 
       infoLog(PATH); 
       DownloadFromUrl(PATH, urlString); 
       img_path.add(PATH); 
     } 


private void DownloadFromUrl(String fileName, String urlStr) 
     { 
      try 
      { 
      URL url = new URL(urlStr); 
      File file = new File(fileName); 
      URLConnection ucon = url.openConnection(); 
      InputStream is = ucon.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is); 
      ByteArrayBuffer baf = new ByteArrayBuffer(50); 
      int current = 0; 
      while ((current = bis.read()) != -1) 
      { 
      baf.append((byte) current); 
      } 

      FileOutputStream fos = new FileOutputStream(file,true); 
      fos.write(baf.toByteArray()); 
      fos.close(); 
      infoLog("going ryt...."); 
     } 
     catch (IOException e) 
     { 
      infoLog("download "+ e.getMessage()); 
     } 
     } 

如何将图像加载到imageView?我试过了。

 File filePath = getFileStreamPath(img_path.get(i)); 
     imageView.setImageDrawable(Drawable.createFromPath(filePath.toString())); 

但它没有工作。

+0

请添加您urlStr字符串在这里.. ???意味着你通过这种方法传递的信息。 – 2012-07-19 07:38:05

+0

你在这个文件中得到了什么路径wyinMyDir.getAbsolutePath() – Nirali 2012-07-19 07:38:53

+0

我得到的路径是/data/data/com.yellow.activity/files/-1718716270 – Roshni 2012-07-19 08:15:57

回答

0

我解决它。 替换下面的代码

File filePath = getFileStreamPath(img_path.get(i)); 
imageView.setImageDrawable(Drawable.createFromPath(filePath.toString())); 

imageView.setImageDrawable(Drawable.createFromPath(img_path.get(i))); 
0

尝试这种方式

String PATH = fileWithinMyDir.getAbsolutePath() + filename; 
+0

仍然得到异常th java.lang.IllegalArgumentException:File/data/data/com .yellow.activity/files-1717792749包含一个路径分隔符 – Roshni 2012-07-19 08:02:26

1

要保存到内部存储器...

File fileWithinMyDir = getApplicationContext().getFilesDir(); 
    try 
      { 
       StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
       .permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
      URL url = new URL("http://t2.gstatic.com /images?q=tbn:ANd9GcQjZgUffqqe2mKKb5VOrDNd-ZxD7sJOU7WAHlFAy6PLbtXpyQZYdw"); 
      File file = new File(fileWithinMyDir.getAbsolutePath() + "/" +"sun.jpg"); 
      URLConnection ucon = url.openConnection(); 
      InputStream is = ucon.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is); 
      ByteArrayBuffer baf = new ByteArrayBuffer(50); 
      int current = 0; 
      while ((current = bis.read()) != -1) 
      { 
      baf.append((byte) current); 
      } 

      FileOutputStream fos = new FileOutputStream(file); 
      fos.write(baf.toByteArray()); 
      fos.close(); 
     } 
     catch (IOException e) 
     { 
      Log.e("download", e.getMessage()); 
     } 

为了从内部存储器加载图像..

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
      .permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
      mImgView1 = (ImageView) findViewById(R.id.mImgView1); 

      Bitmap bitmap = BitmapFactory.decodeFile(fileWithinMyDir.getAbsolutePath() + "/" +"sunn"+".file extension"); 
      mImgView1.setImageBitmap(bitmap); 

这是较新的Android的,显示错误原因是“android.os.networkonmainthreadexception”

ü也可以使用的AsyncTask如果u要解决的问题......

+0

,这对我来说真的很合适,谢谢! – edwinj 2015-07-14 22:38:58

相关问题