为什么mkdirs()无限false?权限都加了

bh1991918 2012-11-27 01:22:08
这不科学!

这是我创建文件夹的代码

File dir = new File(Environment.getExternalStorageDirectory().toString() + "/micapp");

if (!dir.exists()) {
boolean b = dir.mkdirs();
Log.v("sdfile", Environment.getExternalStorageState().toString());
Log.v("sdfile", b + "");
}

两行日志输出的是mounted和false

权限我已经加了
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

加了后DDMS里的sdcard权限显示d---rwxr-x

是什么原因?靠自己搞不定了,各位帮忙
...全文
701 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
losly05 2014-07-18
  • 打赏
  • 举报
回复
更改ADT就好了,可能是模拟器的版本问题,还有就是SD卡大小,太坑了 ,我问题跟你一样,最后一改就成功了!
bh1991918 2012-11-27
  • 打赏
  • 举报
回复

package com.xiakeng.micapp;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.util.HashMap;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ImageView;

public class AsyncBitmapLoader {
	/**
	 * 内存图片软引用缓冲
	 */
	private HashMap<String, SoftReference<Bitmap>> imageCache = null;

	public AsyncBitmapLoader() {
		imageCache = new HashMap<String, SoftReference<Bitmap>>();
	}

	public Bitmap loadBitmap(final ImageView imageView, final String imageURL,
			final ImageCallBack imageCallBack) {
		// 在内存缓存中,则返回Bitmap对象
		if (imageCache.containsKey(imageURL)) {
			SoftReference<Bitmap> reference = imageCache.get(imageURL);
			Bitmap bitmap = reference.get();
			if (bitmap != null) {
				Log.v("cache", "notnull");
				return bitmap;
			}
		} else {
			/**
			 * 加上一个对本地缓存的查找
			 */
			String bitmapName = imageURL
					.substring(imageURL.lastIndexOf("/") + 1);
			File cacheDir = new File(Environment.getExternalStorageDirectory()
					.toString() + "/micapp/");
			File[] cacheFiles = cacheDir.listFiles();
			int i = 0;
			if (null != cacheFiles) {
				for (; i < cacheFiles.length; i++) {
					if (bitmapName.equals(cacheFiles[i].getName())) {
						break;
					}
				}

				if (i < cacheFiles.length) {
					return BitmapFactory.decodeFile(Environment
							.getExternalStorageDirectory().toString()
							+ "/micapp/" + bitmapName);
				}
			}
		}

		final Handler handler = new Handler() {
			/*
			 * (non-Javadoc)
			 * 
			 * @see android.os.Handler#handleMessage(android.os.Message)
			 */
			@Override
			public void handleMessage(Message msg) {
				// TODO Auto-generated method stub
				imageCallBack.imageLoad(imageView, (Bitmap) msg.obj);
			}
		};

		// 如果不在内存缓存中,也不在本地(被jvm回收掉),则开启线程下载图片
		new Thread() {
			/*
			 * (non-Javadoc)
			 * 
			 * @see java.lang.Thread#run()
			 */
			@Override
			public void run() {
				// TODO Auto-generated method stub
				InputStream bitmapIs = HttpUtils.getStreamFromURL(imageURL);

				Bitmap bitmap = BitmapFactory.decodeStream(bitmapIs);
				imageCache.put(imageURL, new SoftReference<Bitmap>(bitmap));
				Message msg = handler.obtainMessage(0, bitmap);
				handler.sendMessage(msg);

				File dir = new File(Environment.getExternalStorageDirectory()
						.toString() + "/micapp");
				File testdir = new File(Environment
						.getExternalStorageDirectory().toString());
				if (!dir.exists()) {
					boolean b = dir.mkdirs();
					Log.v("sdfile", Environment.getExternalStorageState()
							.toString());
					Log.v("sdfile", b + "");
					Log.v("sdfile", testdir.canRead() + "canread?");
					Log.v("sdfile", testdir.canWrite() + "canwrite?");
					Log.v("sdfile", Environment.getExternalStorageState()
							.equals(Environment.MEDIA_MOUNTED) + "写入权限?");
				}

				File bitmapFile = new File(Environment
						.getExternalStorageDirectory().toString()
						+ "/micapp/"
						+ imageURL.substring(imageURL.lastIndexOf("/") + 1));

				if (!bitmapFile.exists()) {
					try {
						bitmapFile.createNewFile();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				FileOutputStream fos;
				try {
					fos = new FileOutputStream(bitmapFile);
					bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
					fos.close();
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}.start();

		return null;
	}

	public interface ImageCallBack {
		public void imageLoad(ImageView imageView, Bitmap bitmap);
	}

}
bh1991918 2012-11-27
  • 打赏
  • 举报
回复
这是我bitmaploader的完整代码 package com.xiakeng.micapp; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.lang.ref.SoftReference; import java.util.HashMap; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.util.Log; import android.widget.ImageView; public class AsyncBitmapLoader { /** * 内存图片软引用缓冲 */ private HashMap<String, SoftReference<Bitmap>> imageCache = null; public AsyncBitmapLoader() { imageCache = new HashMap<String, SoftReference<Bitmap>>(); } public Bitmap loadBitmap(final ImageView imageView, final String imageURL, final ImageCallBack imageCallBack) { // 在内存缓存中,则返回Bitmap对象 if (imageCache.containsKey(imageURL)) { SoftReference<Bitmap> reference = imageCache.get(imageURL); Bitmap bitmap = reference.get(); if (bitmap != null) { Log.v("cache", "notnull"); return bitmap; } } else { /** * 加上一个对本地缓存的查找 */ String bitmapName = imageURL .substring(imageURL.lastIndexOf("/") + 1); File cacheDir = new File(Environment.getExternalStorageDirectory() .toString() + "/micapp/"); File[] cacheFiles = cacheDir.listFiles(); int i = 0; if (null != cacheFiles) { for (; i < cacheFiles.length; i++) { if (bitmapName.equals(cacheFiles[i].getName())) { break; } } if (i < cacheFiles.length) { return BitmapFactory.decodeFile(Environment .getExternalStorageDirectory().toString() + "/micapp/" + bitmapName); } } } final Handler handler = new Handler() { /* * (non-Javadoc) * * @see android.os.Handler#handleMessage(android.os.Message) */ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub imageCallBack.imageLoad(imageView, (Bitmap) msg.obj); } }; // 如果不在内存缓存中,也不在本地(被jvm回收掉),则开启线程下载图片 new Thread() { /* * (non-Javadoc) * * @see java.lang.Thread#run() */ @Override public void run() { // TODO Auto-generated method stub InputStream bitmapIs = HttpUtils.getStreamFromURL(imageURL); Bitmap bitmap = BitmapFactory.decodeStream(bitmapIs); imageCache.put(imageURL, new SoftReference<Bitmap>(bitmap)); Message msg = handler.obtainMessage(0, bitmap); handler.sendMessage(msg); File dir = new File(Environment.getExternalStorageDirectory() .toString() + "/micapp"); File testdir = new File(Environment .getExternalStorageDirectory().toString()); if (!dir.exists()) { boolean b = dir.mkdirs(); Log.v("sdfile", Environment.getExternalStorageState() .toString()); Log.v("sdfile", b + ""); Log.v("sdfile", testdir.canRead() + "canread?"); Log.v("sdfile", testdir.canWrite() + "canwrite?"); Log.v("sdfile", Environment.getExternalStorageState() .equals(Environment.MEDIA_MOUNTED) + "写入权限?"); } File bitmapFile = new File(Environment .getExternalStorageDirectory().toString() + "/micapp/" + imageURL.substring(imageURL.lastIndexOf("/") + 1)); if (!bitmapFile.exists()) { try { bitmapFile.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } FileOutputStream fos; try { fos = new FileOutputStream(bitmapFile); bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); return null; } public interface ImageCallBack { public void imageLoad(ImageView imageView, Bitmap bitmap); } }
bh1991918 2012-11-27
  • 打赏
  • 举报
回复
引用 9 楼 sundapengmail 的回复:
你用RE管理器试下,看看能不能创建目录和文件? 如果也不能创建,那就是你的OS问题了。
不管是真机测试还是DDMS下模拟器,都能手动创建文件夹,导入文件之类的,但通过代码就不行
sundapengmail 2012-11-27
  • 打赏
  • 举报
回复
你用RE管理器试下,看看能不能创建目录和文件? 如果也不能创建,那就是你的OS问题了。
bh1991918 2012-11-27
  • 打赏
  • 举报
回复
引用 7 楼 sasuke38 的回复:
是不是你是使用了系统权限
什么意思?怎么解决?
Jobernowl 2012-11-27
  • 打赏
  • 举报
回复
是不是你是使用了系统权限
bh1991918 2012-11-27
  • 打赏
  • 举报
回复
引用 5 楼 ph0ney 的回复:
AndroidManifest.xml里面添加下面一行 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
都说加了啊。。。
ph0ney 2012-11-27
  • 打赏
  • 举报
回复
AndroidManifest.xml里面添加下面一行 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
bh1991918 2012-11-27
  • 打赏
  • 举报
回复
用已经root的真机测试过了,还是不能创建,这是为什么?
bh1991918 2012-11-27
  • 打赏
  • 举报
回复
引用 2 楼 sasuke38 的回复:
File dir = new File(Environment.getExternalStorageDirectory().getAbslotionPath() + "/micapp");
不行啊,话说和原来的代码有区别吗?本来不就是绝对路径吗? 我觉得就是权限问题,不知道怎么解决
Jobernowl 2012-11-27
  • 打赏
  • 举报
回复
File dir = new File(Environment.getExternalStorageDirectory().getAbslotionPath() + "/micapp");
bh1991918 2012-11-27
  • 打赏
  • 举报
回复
我又加了两行 File sd = new File(Environment.getExternalStorageDirectory().toString()); Log.v("sdfile", sd.canRead() + "canread?"); Log.v("sdfile", sd.canWrite() + "canwrite?"); 输出结果是 truecanread? falsecanwrite? 震惊啊!!!sd卡只能读不能写啊!!!权限都加了啊!!!到底是为什么啊!!!

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧