【问题标题】:Crash, when getting the number of images stored in the SD崩溃,当获取存储在 SD 中的图像数量时
【发布时间】:2012-03-19 11:02:57
【问题描述】:

我正在尝试获取存储在 SD 中的所有图像的数量,但我不知道应用程序崩溃的原因。

代码:

File dir = new File(Environment.getExternalStorageDirectory()
            + "/images");
File[] files = dir.listFiles();
//int numberOfImages=files.length;

Toast.makeText(getBaseContext(), "fdds"+files.length, Toast.LENGTH_SHORT).show();

LogCat:

03-19 11:54:44.425:E/AndroidRuntime(11775):致命异常:main
03-19 11:54:44.425: E/AndroidRuntime(11775): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.androidbook.MediaStoreDemo/com.androidbook.MediaStoreDemo.MediaStoreDemoActivity}: java.lang.NullPointerException
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 android.os.Handler.dispatchMessage(Handler.java:99)
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 android.os.Looper.loop(Looper.java:130)
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 android.app.ActivityThread.main(ActivityThread.java:3691)
03-19 11:54:44.425: E/AndroidRuntime(11775): at java.lang.reflect.Method.invokeNative(Native Method)
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 java.lang.reflect.Method.invoke(Method.java:507)
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
03-19 11:54:44.425: E/AndroidRuntime(11775): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
03-19 11:54:44.425: E/AndroidRuntime(11775): at dalvik.system.NativeStart.main(Native Method)
03-19 11:54:44.425:E/AndroidRuntime(11775):原因:java.lang.NullPointerException
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 com.androidbook.MediaStoreDemo.MediaStoreDemoActivity.onCreate(MediaStoreDemoActivity.java:31)
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-19 11:54:44.425: E/AndroidRuntime(11775): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)

【问题讨论】:

  • 您只是遇到了 null 的问题,这是一个任何人都可以轻松识别的基本错误。你应该学习一些基本的编程。 :)

标签: android android-sdcard


【解决方案1】:

试试,

if(files != null)
{
 Toast.makeText(getBaseContext(), "fdds"+files.length, Toast.LENGTH_SHORT).show();
}

公共文件[] listFiles ()

返回包含在此文件表示的目录中的文件数组。 如果该文件不是目录则返回null。如果该文件的路径是绝对的,则数组中的文件的路径是绝对的,否则它们是相对的。

所以只需检查/images 目录..

【讨论】:

  • 现在App,没有崩溃,但是Toast什么都不显示,SD里还有图片???!!
  • 你能告诉我如何知道图片保存在SD中的文件吗??
  • 在Camera目录里面有图片等目录,我把路径改成了/Camera.....但是还是什么都没有显示
  • 所以 null 值是显而易见的结果。只需写一个关于如何在 SO 中从 sdcard 获取存储图像的新问题。
【解决方案2】:

请使用以下代码:

File dir = new File(Environment.getExternalStorageDirectory()
            + "images");
File[] files = dir.listFiles();
//int numberOfImages=files.length;

Toast.makeText(getBaseContext(), "fdds"+files.length, Toast.LENGTH_SHORT).show();

现在您的应用不应抛出任何异常。

您应该使用image 而不是/image

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2014-09-02
    • 1970-01-01
    • 2011-02-05
    相关资源
    最近更新 更多