读取SD卡的容量的时候出错了。怎么回事?

suhaihui 2014-07-20 08:48:04


LOGCAT如上。

程序如下:

public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
TextView sizeTextView=(TextView) rootView.findViewById(R.id.allsize);
sizeTextView.setText("SD卡总大小:"+getSDTotalSize());
return rootView;
}

/**
* 获得SD卡总大小
*
* @return
*/
private String getSDTotalSize() {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSizeLong();
long totalBlocks = stat.getBlockCountLong();
return Formatter.formatFileSize(this.getActivity(),blockSize*totalBlocks);
}
}

为何会提示没有getBlockSizeLong(); 函数?不明白!
...全文
507 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mybeta 2014-07-21
  • 打赏
  • 举报
回复
引用 7 楼 suhaihui 的回复:
[quote=引用 6 楼 mybeta 的回复:] getBlockSizeLong () Added in API level 18 请使用 getBlockSize ()
请看!这是我为什么不用 getBlockSize ()的原因 [/quote] 因为。。。你的target sdk设置的大于等于18,而min sdk设置的小于18,只要min sdk小于18,你就不能使用18中添加 的方法,至于你这里提示过期是正常的,这只是在API 18中过期,即使过期,照样正常使用
哎,真难 2014-07-21
  • 打赏
  • 举报
回复
那就不知道了,你看下android自带的jar包里面是不是没有找到android.os.StatFs;
mybeta 2014-07-21
  • 打赏
  • 举报
回复
getBlockSizeLong () Added in API level 18 请使用 getBlockSize ()
suhaihui 2014-07-21
  • 打赏
  • 举报
回复
引用 5 楼 heaimnmn 的回复:
目测没错误,看下getBlockSizeLong是调用哪里的方法
是StatFS里面的方法。
suhaihui 2014-07-21
  • 打赏
  • 举报
回复
引用 4 楼 u010129124 的回复:

/**
* The size, in bytes, of a block on the file system. This corresponds
* to the Unix statfs.f_bsize field.
*/
public native int getBlockSize();


用这个呢


为什么我的是这样?
suhaihui 2014-07-21
  • 打赏
  • 举报
回复
引用 6 楼 mybeta 的回复:
getBlockSizeLong () Added in API level 18
请使用 getBlockSize ()


请看!这是我为什么不用 getBlockSize ()的原因

哎,真难 2014-07-21
  • 打赏
  • 举报
回复
目测没错误,看下getBlockSizeLong是调用哪里的方法
青龙山之叶 2014-07-21
  • 打赏
  • 举报
回复

 /**
  * The size, in bytes, of a block on the file system.  This corresponds
  * to the Unix statfs.f_bsize field.
  */
    public native int getBlockSize();

用这个呢
fireyou 2014-07-21
  • 打赏
  • 举报
回复
已经显示错误了:NoSuchMethodError ... 没有方法。。
sagittarius1988 2014-07-21
  • 打赏
  • 举报
回复
你可以问提供系统的厂商要方法或者用反射看看StatFs下都有哪些接口方法
sagittarius1988 2014-07-21
  • 打赏
  • 举报
回复
系统被定制过了,没有getBlockSizeLong这个方法
第一款真正意义上的U盘扩容检测工具 集5大功能于一身:扩容检测、坏块扫描、速度测试、老化测试、坏块屏蔽 MyDiskTest是一款U盘/SD卡/CF卡等移动存储产品扩容识别工具。可以方便的检测出存储产品是否经过扩充容量,以次充好。 还可以检测FLASH闪存是否有坏块,是否采用黑片,不破坏磁盘原有数据。 并可以测试U盘的读取和写入速度,对存储产品进行老化试验。是你挑选U盘和存储卡必备的工具。 ----------------------------------- 更新: V2.50 1、新增了功能强大的速度测试模块,是您选购和评测U盘、SD卡、CF卡、移动硬盘最为理想和专业的工具 V2.42 1、修正了“坏块软屏蔽”大于2GB的盘发生内存溢出的问题 2、修正了测试某些黑片盘显示可用空间小于0的情况 3、修正了用快速扩容测试某些黑片盘发生下标越界错误 V2.40 1、主要改进了容量测试算法和界面 V2.33 1、改进了扫描过程异常出现“严重I/O错误” 2、改进了进度条显示方式,可看出坏块的位置 3、文件读写操作测试增加了速度数值显示,结果更直观准确 v2.30 1、修正了一个快速测试扩容的问题 2、改进了为i5128方案时检测的bug V2.20 1、继续改进速度测试模块 V2.10 1、增加一种坏块检测算法(未选检测黑片时为快速测扩容),可满足大量检测的需要 2、增加文件操作速度测试模块,检测出的结果更帖近实际操作 V2.00 1、增加英文语言界面,并可根据操作系统自动识别 2、增加屏蔽FLASH坏块功能,使数据存储更安全 注意:使用此功能后格式化磁盘会使屏蔽功能失效 V1.80 1、加强了速度测试功能,在选购存储产品时更加实用 2、修正了当U盘没有一个好区块时显示为1M的bug V1.70 1、增加了对量产成本地磁盘的U盘的支持 2、增加对量产为USB HDD的U盘的识别能力 3、修正了一个可能造成非法操作的问题 4、排除了对USB光驱的检测,因为不可写 V1.60 1、修正了测试出错的处理,当测试是可能导致数据损坏的情况给出提示。 2、加入了进行稳定性(老化)测试时可以选择测试的次数。 V1.50 1、增加了稳定性(老化)测试功能,助你挑选质量上乘的U盘/存储卡 2、增加了显示设备名称功能 3、修正了一个可能导致内存溢出非法操作的bug 4、优化了程序代码 V1.45 1.改进了快速扫描方式的算法,扫描结果更准确(代价是比原来稍慢) 2.增加了自动感应USB设备插拔,不必每次换设备都手动刷新(注意!测试中一定不要插拔被测设备,以免数据丢失!且测试过程中不响应其他设备的插拔动作。) V1.40 优化了磁盘坏块扫描算法 V1.30 改进了无法检测大于2G容量问题,改进检测算法 ----------------------------------- 反馈:http://www.mydigit.net/read.php?tid-22095.html ----------------------------------- 声明: 在检测前请自行备份U盘/SD卡内的文件资料,以防数据丢失。

80,471

社区成员

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

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