Android:使用URL打开InputStream时抛出FileNotFoundException

3
我将尝试运行以下代码。
    Uri uri = Uri.parse("URL of a photo");

    ContentResolver cr = getContentResolver();

    try {
        InputStream fis = cr.openInputStream(uri);
        // Do some stuff here ..
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

但是这个代码会抛出FileNotFoundException的异常,而我确定URL是正确的。有没有其他方法可以打开URL的输入流呢?

编辑:LogCat输出

11-06 22:05:37.939: W/System.err(20057): java.io.FileNotFoundException: No content provider: http://www.vnvlvokc.com/ow_userfiles/plugins/shoppro/images/product_1.jpg
11-06 22:05:37.939: W/System.err(20057):    at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:481)
11-06 22:05:37.939: W/System.err(20057):    at android.content.ContentResolver.openInputStream(ContentResolver.java:319)
11-06 22:05:37.939: W/System.err(20057):    at com.example.myfacebook.Act1.post_photo(Act1.java:68)
11-06 22:05:37.939: W/System.err(20057):    at com.example.myfacebook.Act1.onActivityResult(Act1.java:58)
11-06 22:05:37.939: W/System.err(20057):    at android.app.Activity.dispatchActivityResult(Activity.java:3908)
11-06 22:05:37.939: W/System.err(20057):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2694)
11-06 22:05:37.939: W/System.err(20057):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:2740)
11-06 22:05:37.939: W/System.err(20057):    at android.app.ActivityThread.access$2000(ActivityThread.java:121)
11-06 22:05:37.939: W/System.err(20057):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:991)
11-06 22:05:37.939: W/System.err(20057):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-06 22:05:37.939: W/System.err(20057):    at android.os.Looper.loop(Looper.java:130)
11-06 22:05:37.939: W/System.err(20057):    at android.app.ActivityThread.main(ActivityThread.java:3892)
11-06 22:05:37.949: W/System.err(20057):    at java.lang.reflect.Method.invokeNative(Native Method)
11-06 22:05:37.949: W/System.err(20057):    at java.lang.reflect.Method.invoke(Method.java:507)
11-06 22:05:37.949: W/System.err(20057):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
11-06 22:05:37.949: W/System.err(20057):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:642)
11-06 22:05:37.949: W/System.err(20057):    at dalvik.system.NativeStart.main(Native Method)

不确定我是否被允许在这里发布外部网址,但这是我正在测试的网址http://www.vnvlvokc.com/ow_userfiles/plugins/shoppro/images/product_1.jpg - Islam Hassan
你尝试过将 InputStream 行替换为以下内容吗?InputStream fis = (InputStream) new URL(fileUrl).getContent(); - jnthnjns
它产生了IOException! - Islam Hassan
1
你能分享一下你的LogCat吗?为了验证目的,你在清单文件中设置了正确的权限,对吧? - jnthnjns
Asok,我不认为这是权限问题。如果是,logCat会建议我正确的权限。但无论如何,打开输入流的权限是什么?我没有使用任何权限。 - Islam Hassan
1个回答

4
如果您想将图片内容下载到手机上,则不应使用意图解析器,而应使用HttpUrlConnection,并将其内容复制到文件中。
有几种方法可以做到这一点,但只有少数是正确的。如果您想要这样做,请告诉我,我会给您一些提示。
您正在使用内容解析器尝试从应用程序或系统获取ContentProvider,以便获取此URL的内容...这真的有点尴尬。

我正在遵循这篇帖子的被接受答案 http://stackoverflow.com/questions/6478572/uploading-pictures-to-facebook-using-graph-api-with-android-sdk我想要上传一张照片到Facebook相册。 - Islam Hassan
这与你正在做的有什么关联呢?两个代码看起来非常不同。 - Snicolas
try内的前两行是我正在尝试做的事情。我还处于非常初步的阶段 :) - Islam Hassan
1
要打开一个流,你必须使用HttpUrlConnection。当涉及到在Android上以正确的方式执行后台任务时,这个主题似乎很狭窄,但实际上相当广泛。在这里查看AsyncTask示例:http://homepages.ius.edu/RWISMAN/C490/html/Android-URLImage.htm。当你想要更强大的解决方案时,请查看Github上的RoboSpice。 - Snicolas
1
不用客气。但是看一下这张信息图,了解为什么RoboSpice更好:goo.gl/jxNin。也许可以稍后再看。 - Snicolas
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接