首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

小妹请问SD卡从文件夹读取图片不成功的有关问题

2012-04-26 
小妹请教SD卡从文件夹读取图片不成功的问题!同一张图片我在SD卡根目录读取就没有问题!在某一个文件夹下读

小妹请教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);    }}
[解决办法]
探讨
要说设置也应该没问题!
String filepath="/mnt/sdcard/first/abc.jpg";
String rootpath="/mnt/sdcard/abc.jpg";
我都这样写了!

在sdcard目录下的图片就完全可以读取出来!
在sdcard/first/目录下的图片就读取不出来!

我想是哪里设置有问题!代码应该是没问题!!



[解决办法]
探讨
sdcard 的权限是 d---rwxr-x
sdcard/first 的权限也是 d---rwxr-x
sdcard/first/abc.jpg 的权限是 ---rwxr-x

[解决办法]
问题解决
随便赋值个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正解,我在真机上也测试成功,代码没有改动,就是刚开始连不上网。刚重启了下机器又能连上了

热点排行