Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取SD卡上的文件时出错_Java_Android_Io - Fatal编程技术网

Java 读取SD卡上的文件时出错

Java 读取SD卡上的文件时出错,java,android,io,Java,Android,Io,我的对话框显示目录/sdcard及其所有文件。选择文件/图像后,路径将与位图图像一起保存,例如: file.name = "/sdcard/Pictures/Screenshots/Screenshot_2013-01-15-10-42-02.jpg";` 但是,每次我试图通过单击位图打开文件时,都会导致打开的应用程序崩溃,而不是我的应用程序崩溃 我已设置写入外部存储权限。代码片段如下所示。我真的不知道出了什么问题。我还尝试了所有文件类型,如txt、pdf、doc等,所有这些都会导致打开的文件

我的对话框显示目录
/sdcard
及其所有文件。选择文件/图像后,路径将与位图图像一起保存,例如:

file.name = "/sdcard/Pictures/Screenshots/Screenshot_2013-01-15-10-42-02.jpg";`
但是,每次我试图通过单击位图打开文件时,都会导致打开的应用程序崩溃,而不是我的应用程序崩溃

我已设置写入外部存储权限。代码片段如下所示。我真的不知道出了什么问题。我还尝试了所有文件类型,如
txt
pdf
doc
等,所有这些都会导致打开的文件应用程序崩溃,并且无法打开文件

Adapter.java(到位图)

Activity.java

public void onItemClick(AdapterView<?> parent, View v, int position, long id){
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(Uri.fromFile(new File(file.name)));
    intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

  switch(file.getTypeByName()){
  case Image:
       intent.setType("image/*");
       break;
  }
 startActivityforResult(intent, 000);
}
所以我找到了这个答案

引用一位评论者的话:

使用setDataAndType()而不是两个单独的调用修复了她的问题 问题

那真的让我很困惑为什么那是必要的。然后我研究了
Intent.setType()
Intent.setData()
,以及
Intent.setDataAndType()
的实现。看看这个:

public Intent setType(String type) {
    mData = null;
    mType = type;
    return this;
}

public Intent setData(Uri data) {
    mData = data;
    mType = null;
    return this;
}
因此,在
setData
之后调用
setType
会删除数据,调用
setData
会删除类型。这就是gallery应用程序崩溃的原因,您在
setData
之后执行
setType
,因此当发送意图时,数据为空。诚然,确实提到了这种行为,但基于方法名称,它不是直观的,类似于
setTypeOnly
setDataOnly
似乎更明确地表达了这些方法的目的。否则,不清楚这些方法是否相互排斥


使用
setDataAndType()
可以解决您的问题。

原因:java.lang.NullPointerException。调试你的代码,你发现了错误。如果我们要深入研究Gallery.java,我们需要的是这个版本的Android。转到“设置->关于设备”并报告确切的Android版本。@j\u\m设备上的版本是4.0.4。这是一个重复:不,他有两个不同的问题。有一个得到了答复。这是一个后续。这对我来说似乎真的很奇怪,但是嘿-编程是工作的艺术,而不是看起来应该工作的艺术+我同意,这应该没有必要。如果它能解决海报中的问题,我会很感兴趣的。忘记不应该是必要的——因为我从未见过Uri类的内部实现,所以我不认为它会起作用。现在我浏览了一下源代码,它让我再也不想使用Uri类了!对不起,我在和同事说话。。但上述答案对我来说并不适用。我试过这样做,信不信由你,Uri.fromFile以“file:///sdcard/downloads/filepath.ext“格式也。。
04-10 12:04:42.164: E/AndroidRuntime(4513): FATAL EXCEPTION: main
04-10 12:04:42.164: E/AndroidRuntime(4513): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.sec.gallery3d/com.android.sec.gallery3d.app.Gallery}: java.lang.NullPointerException
04-10 12:04:42.164: E/AndroidRuntime(4513):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at android.os.Looper.loop(Looper.java:137)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at android.app.ActivityThread.main(ActivityThread.java:4512)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at java.lang.reflect.Method.invokeNative(Native Method)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at java.lang.reflect.Method.invoke(Method.java:511)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at dalvik.system.NativeStart.main(Native Method)
04-10 12:04:42.164: E/AndroidRuntime(4513): Caused by: java.lang.NullPointerException
04-10 12:04:42.164: E/AndroidRuntime(4513):     at com.android.sec.gallery3d.app.Gallery.startViewAction(Gallery.java:377)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at com.android.sec.gallery3d.app.Gallery.initializeByIntent(Gallery.java:237)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at com.android.sec.gallery3d.app.Gallery.onCreate(Gallery.java:149)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at android.app.Activity.performCreate(Activity.java:4469)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
04-10 12:04:42.164: E/AndroidRuntime(4513):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
04-10 12:04:42.164: E/AndroidRuntime(4513):     ... 11 more
04-10 12:04:42.164: W/ActivityManager(668):   Force finishing activity r.intent.getComponent().flattenToShortString()
04-10 12:04:42.234: E/android.os.Debug(668): !@Dumpstate > dumpstate -k -t -n -z -d -o /data/log/dumpstate_app_error
04-10 12:04:42.244: I/dumpstate(4530): begin 
public Intent setType(String type) {
    mData = null;
    mType = type;
    return this;
}

public Intent setData(Uri data) {
    mData = data;
    mType = null;
    return this;
}