小妹请教SD卡从文件夹读取图片不成功的问题!
同一张图片我在SD卡根目录读取就没有问题!
在某一个文件夹下读取Bitmap返回的就是null!
请问各位这是为什么!是哪里没设置!
请各位前辈指教!
- C# code
package com.myAndroid.execrise;import java.io.File;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Environment;import android.widget.ImageView;public class ImageActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView imageView01=(ImageView)findViewById(R.id.imageView01); ImageView imageView02=(ImageView)findViewById(R.id.imageView02); String filepath=Environment.getExternalStorageDirectory()+File.separator+"firstmobile/abc.jpg"; String rootpath=Environment.getExternalStorageDirectory()+File.separator+"abc.jpg"; Bitmap bitmap1=BitmapFactory.decodeFile(filepath);//这里得到的结果是null Bitmap bitmap2=BitmapFactory.decodeFile(rootpath); imageView01.setImageBitmap(bitmap1); imageView02.setImageBitmap(bitmap2); }}[解决办法]
<!-- 添加sdcard权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- 在SDCard中创建与删除文件权限 -->
<use-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></use-permission>
<use-permission android:name="android.permission.RESTART_PACKAGES"></use-permission>
[解决办法]
写成绝对路径试试
[解决办法]
//Bitmap bitmap1=BitmapFactory.decodeFile(filepath);//这里得到的结果是null
在这句代码前面打印一下filepath的值:
Log.i("Log:","------------->"+filepath);
在DDMS下看一下打印的值对不对。
[解决办法]
- Java code
package com.myandrod.execrise;import java.io.File;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Environment;import android.widget.ImageView;public class ImageActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView imageView01=(ImageView)findViewById(R.id.imageview01); ImageView imageView02=(ImageView)findViewById(R.id.imageview02); String filepath=Environment.getExternalStorageDirectory()+File.separator+"DCIM/3_1161090452.jpg"; String rootpath=Environment.getExternalStorageDirectory()+File.separator+"00.JPG"; Bitmap bitmap1=BitmapFactory.decodeFile(filepath);//我在系统默认的子目录DCIM下面读取图片不为null Bitmap bitmap2=BitmapFactory.decodeFile(rootpath); imageView01.setImageBitmap(bitmap1); imageView02.setImageBitmap(bitmap2); }}
[解决办法]
[解决办法]
[解决办法]
问题解决
随便赋值个BitmapFactory.Options() 就行了
optsa = new BitmapFactory.Options();
optsa.inSampleSize = 10;
System.out.println("iv"+i+" "+list.get(i));
Bitmap originalImage = BitmapFactory.decodeFile(list.get(i),optsa);
睡觉,我靠骨骼
[解决办法]
发现了两处错误:
1、downloadFile()方法里的 String filepath=rootPath+fileNa+"."+fileEx; 是局部变量,最好声明成全局变量
2、下载图片时的代码有问题,生成的图片打开后没有预览
我按照自己的写法稍微修改了一下,在真机上测试成功了:
- Java code
package com.test.android;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.BitmapFactory.Options;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.widget.ImageView;public class DownloadImage extends Activity { String filepath; String rootpath="/sdcard/img.jpg"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView imageView01=(ImageView)findViewById(R.id.image1); ImageView imageView02=(ImageView)findViewById(R.id.image2); try { downloadFile("http://www.sohu.com/upload/hp/images/icon01.gif"); } catch (IOException e) { e.printStackTrace(); } File file=new File(filepath); if(file.exists()) { Bitmap bitmap1=BitmapFactory.decodeFile(filepath);//这里得到的结果是null Bitmap bitmap2=BitmapFactory.decodeFile(rootpath); imageView01.setImageBitmap(bitmap1); imageView02.setImageBitmap(bitmap2); } } public void downloadFile(String url) throws IOException { String fileEx = url.substring(url.lastIndexOf(".")+1,url.length()).toLowerCase(); String fileNa = url.substring(url.lastIndexOf("/")+1,url.lastIndexOf(".")); URL fileUrl = new URL(url); URLConnection conn = fileUrl.openConnection(); conn.connect(); InputStream inputStream = conn.getInputStream(); if (inputStream == null){ Log.e("Error", "流为空"); throw new RuntimeException("流为空"); } File sdCard = Environment.getExternalStorageDirectory(); String rootPath = sdCard.getPath()+"/first/"; File file=new File(rootPath); if(!file.exists()) { file.mkdir(); } filepath=rootPath+fileNa+"."+fileEx; OutputStream os = new FileOutputStream(filepath); byte buf[] = new byte[1024]; int numread = 0; while ((numread = inputStream.read(buf))!= -1) { os.write(buf, 0, numread); } inputStream.close(); os.close(); }}
[解决办法]
47正解,我在真机上也测试成功,代码没有改动,就是刚开始连不上网。刚重启了下机器又能连上了