【发布时间】:2016-10-26 09:49:57
【问题描述】:
我正在尝试在我的应用程序中显示内部和外部(SD 卡)内存的大小。我的代码在 kitkat 及以下 api 版本中运行良好,但我的应用程序在 Marshmallow 或棒棒糖中崩溃。这是我的代码.. .
public static long getAvailableInternalMemorySize()
{
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}
public static long getTotalInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
public static long getAvailableExternalMemorySize() {
String secStore = System.getenv("SECONDARY_STORAGE");
File path = new File(secStore);
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
long total = availableBlocks * blockSize;
return total;
}
public static long getTotalExternalMemorySize() {
String secStore = System.getenv("SECONDARY_STORAGE");
File path = new File(secStore);
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getBlockCount();
long total = availableBlocks * blockSize;
return total;
}
您能告诉我在上述 api 版本中获取内存大小的解决方案吗...?
【问题讨论】:
-
您的应用程序崩溃,因为
System.getenv("SECONDARY_STORAGE");可以返回null。你没有考虑到这一点。因此出现 NullPointerException。您为什么不报告此异常?
标签: android android-studio memory-management android-6.0-marshmallow