Android 无法解码流:fileNotFoundException
基本上,我使用DOM解析器从列表视图中的RSS提要中检索标题、描述、发布日期和缩略图。这是我的示例代码Android 无法解码流:fileNotFoundException,android,exception,rss,decode,Android,Exception,Rss,Decode,基本上,我使用DOM解析器从列表视图中的RSS提要中检索标题、描述、发布日期和缩略图。这是我的示例代码 public ArrayList<HashMap<String, String>> processXML( InputStream inputStream) throws Exception { DocumentBuilderFactory documentBuilderFactory = Documen
public ArrayList<HashMap<String, String>> processXML(
InputStream inputStream) throws Exception {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory
.newDocumentBuilder();
Document xmlDocument = documentBuilder.parse(inputStream);
Element rootElement = xmlDocument.getDocumentElement();
L.m("" + rootElement.getTagName());
NodeList itemsList = rootElement.getElementsByTagName("item");
NodeList itemChildren = null;
Node currentItem = null;
Node currentChild = null;
NamedNodeMap mediaThumbnailAttr = null;
Node currentAttribute=null;
int count = 0;
ArrayList<HashMap<String, String>> results = new ArrayList<>();
HashMap<String, String> currentMap = null;
for (int i = 0; i < itemsList.getLength(); i++) {
currentItem = itemsList.item(i);
itemChildren = currentItem.getChildNodes();
currentMap = new HashMap<>();
for (int j = 0; j < itemChildren.getLength(); j++) {
currentChild = itemChildren.item(j);
if (currentChild.getNodeName().equalsIgnoreCase("title")) {
// L.m(currentChild.getTextContent());
currentMap.put("title", currentChild.getTextContent());
}
if (currentChild.getNodeName().equalsIgnoreCase("pubDate")) {
// L.m(currentChild.getTextContent());
currentMap
.put("pubDate", currentChild.getTextContent());
}
if (currentChild.getNodeName().equalsIgnoreCase(
"description")) {
// L.m(currentChild.getTextContent());
currentMap.put("description",
currentChild.getTextContent());
}
if(currentChild.getNodeName().equalsIgnoreCase("media:thumbnail")){
//L.m(""+currentChild.getTextContent());
mediaThumbnailAttr = currentChild.getAttributes();
for(int k=0;k<mediaThumbnailAttr.getLength();
k++){
currentAttribute = mediaThumbnailAttr.item(k);
if(currentAttribute.getNodeName()
.equalsIgnoreCase("url")){
count++;
//L.m(currentChild.getAttributes().item(0).getTextContent());
}
//L.m();
currentMap.put("imageURL", currentChild
.getAttributes().item(0).getTextContent());
}
count=0;
}
}
if (currentMap != null && !currentMap.isEmpty()) {
results.add(currentMap);
}
count = 0;
}
return results;
}
}
}
有什么问题吗
setImageURI(Uri.parse(currentItem.get(“imageURL”)) 错误是:
Unable to decode stream: java.io.FileNotFoundException:
/http:/i.dailymail.co.uk/i/pix/2014/09/27/1411832985119_Puff_Image_galleryImage_SUNDERLAND_ENGLAND_SEPTEM.JPG: open failed: ENOENT (No such file or directory).
在URL开始之前,请参阅“/”。这导致了FileNotFoundException
。因此,首先,确保您在响应中获得正确的URL
对于测试,请尝试使用硬编码url:
holder.articleImage.setImageURI(Uri.parse("http:/i.dailymail.co.uk/i/pix/2014/09/27/1411832985119_Puff_Image_galleryImage_SUNDERLAND_ENGLAND_SEPTEM.JPG"));
我想这应该行得通。因此,只要做出相应的纠正,你就可以开始了。是的。你是对的!!!我必须创建一个单独的异步任务来下载图像
public class ImageDownloader extends AsyncTask<String, String, Bitmap> {
private MyAdapter parentActivity;
public ImageDownloader(MyAdapter parentActivity) {
super();
this.parentActivity = parentActivity;
}
protected Bitmap doInBackground(String... args) {
try {
Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(args[0]).getContent());
return bitmap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Bitmap image) {
if(image != null){
parentActivity.updateBitmap(image);
}
}
}
获取图像并将其显示到列表中。谢谢你的想法。他们帮了我很多 只有一件事我可以注意到:额外的“/”在Url的开头。它应该是“”。不是“/”我知道。如果我删除holder.articleImage.setImageURI(Uri.parse(currentItem.get(“imageURL”));在我的适配器的getView方法中,我没有看到任何异常..但是该图像也没有出现在列表中..对。。但您得到的url不正确。请检查一下。出于测试目的,您可以尝试硬编码url,如:
holder.articleImage.setImageURI(Uri.parse(“http://i.dailymail.co.uk/i/pix/2014/09/27/1411832985119_Puff_Image_gallerymage_SUNDERLAND_ENGLAND_SEPTEM.JPG”)编码>并检查是否显示图像@我什么都不怕。我按照你的建议做了,得到了这个异常…09-27 13:56:40.349:E/AndroidRuntime(2282):致命异常:main 09-27 13:56:40.349:E/AndroidRuntime(2282):java.lang.NullPointerException:uristringf我注释掉了L.m(currentChild.getAttributes().item(0.getTextContent());在if(currentChild.getNodeName().equalsIgnoreCase(“media:thumbnail”){}中,我读取了日志文件中的图像。这部分是正常的。我将图像的链接放在Uri.parse()中正如您向我展示的,但还没有运气。未显示图像。还有一个异常…resolveUri在坏位图uri上失败:http:/i.dailymail.co.uk/i/pix/2014/0??9/27/1411832985119_Puff_image_galleryImage_SUNDERLAND_ENGLAND_SEPTEM.JPGI获得与以前相同的异常…无法解码流:java.io.FileNotFoundException:/http://i.dailymail.co.uk/i/pix/2014/09/27/1411832985119_poff_Image_gallerymage_SUNDERLAND_ENGLAND_SEPTEM.JPG:open失败:enoint(没有这样的文件或目录)…因此setImageURI方法有问题..嗯…可能是@Theo。。查看是否有帮助。是否有关于如何在listview上加载url图像的教程?我没有发现什么好东西…只是关于懒惰的列表等等。。。
public class ImageDownloader extends AsyncTask<String, String, Bitmap> {
private MyAdapter parentActivity;
public ImageDownloader(MyAdapter parentActivity) {
super();
this.parentActivity = parentActivity;
}
protected Bitmap doInBackground(String... args) {
try {
Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(args[0]).getContent());
return bitmap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Bitmap image) {
if(image != null){
parentActivity.updateBitmap(image);
}
}
}
new ImageDownloader(MyAdapter.this).execute(currentItem.get("imageURL"));