Inputstream无法连接到URL

时间:2014-09-20 11:32:50

标签: android

我正在搜索页面的xml内容并从该xml解析一些URL,这些URL都是Url的图像。 然后我使用位图使图像显示在imageviwer中。此外,我需要该图像用于我的下一个布局设计。如何存储图像以供进一步使用,如果我可以如何操作,我可以将图像存储在可绘制文件夹中。我在下面的代码中提到我需要将imageview内容保存到drawable文件夹..

         protected Void doInBackground(String... params) {

                     try {
                         url=new URL(UrlLink2) ;
                         urlConnection = (HttpURLConnection) url.openConnection();
                            urlConnection.setRequestMethod("GET");
                            InputStream isp=urlConnection.getInputStream();
                        DocumentBuilderFactory DBF=DocumentBuilderFactory.newInstance();
                        DocumentBuilder Db=DBF.newDocumentBuilder();
                            doc=Db.parse(isp);
                            Element rootElem=doc.getDocumentElement();
                            NodeList itemlist=rootElem.getElementsByTagName("item");
                            Node currentitem=null;
                            Node childnode=null;
                            Node ContentChild=null;
                            Node CddatatChild=null;
                            NodeList childnodeList=null;
                            NodeList CddataList=null;
                            NodeList ContentChilList=null;
                            for(int i=0;i<itemlist.getLength();i++){
                                currentitem=itemlist.item(i);
                                childnodeList=currentitem.getChildNodes();
                                for(int j=0;j<childnodeList.getLength();j++){
                                    childnode=childnodeList.item(j);
                                    if(childnode.getNodeName().equalsIgnoreCase("content:encoded")){
                                        ContentChilList=childnode.getChildNodes();
                                        ContentChilList.getLength();
                                        CddatatChild=ContentChilList.item(0);
                                        CddataList=CddatatChild.getChildNodes();
                                            if(CddatatChild.getNodeName().equalsIgnoreCase("#cdata-section")){
                                                GetCddata=CddatatChild.getTextContent().toString();
                                                    GetCddata=CddatatChild.getTextContent();
                                        }
                                    }
                                }
                            }
                        } 
                    catch(Exception e){

                    }
                     try{
                         int i=0;                
                          String ss=GetCddata;
                 Pattern PatternImgURLS = Pattern.compile("(?<=a href=\")(.*?)(?=\")");
                 Pattern PatternImgname = Pattern.compile("(?<=2014\\/09\\/)(.*?)(?=\\.)");
                 Matcher Imagematcher = PatternImgURLS.matcher(ss);    
                 Imagematcher.matches();
                 while (Imagematcher.find()) {
                      ImgUrl=Imagematcher.toMatchResult().group();
                         ImageUrls.add(ImgUrl); 
                        i++;    
                    } 
                 for(int count=0;count<ImageUrls.size();count++){
                     Matcher Namematcher = PatternImgname.matcher(ImageUrls.get(count));
                     Namematcher.matches(); 
                     while (Namematcher.find()) {
                     String MatchTxt=Namematcher.toMatchResult().group();
                     String lowerMatchTxt = MatchTxt.toLowerCase();
                     ImageName.add(lowerMatchTxt);
                     Log.v("dd",ImageName.get(count)); 
                        }
                     }
                       Log.v("dd",ImageUrls.get(0)); 
                       int t=ImageUrls.size();    
                       Log.v("dd",toString().valueOf(t)); 
                       urlConnection.disconnect();
                       url=new URL(ImageUrls[0]) ;
                       urlConnection = (HttpURLConnection) url.openConnection();
                       urlConnection.setRequestMethod("GET");
                       InputStream isp2=urlConnection.getInputStream();
                       bitmap=BitmapFactory.decodeStream(isp2);
                       urlConnection.disconnect();
                     }
                     catch(Exception e){
                              Log.v("h",e.toString()) ;  }

                             @Override        
          protected void onPostExecute(Void result) {
                          super.onPostExecute(result);
                          dialog.dismiss();
 Here I am displaying---> Imageview.setImageBitmap(bitmap);
 the image in Image viwer       
Now how do I store the image from the imageviewer to 
drawable folder in andriod is that possiable.  
       }
        }

3 个答案:

答案 0 :(得分:0)

我建议您不要自己实施,但请选择能够为您完成的知名图书馆。例如,Picasso具有适合您需求的功能。您只需将URL传递给它,Picasso将下载并将图像保存在缓存文件夹中以供下次使用:

Picasso.with(context).load(imageUrl).into(imageView);

您所要做的就是解析这些图像URL并将它们存储在内存中。

答案 1 :(得分:0)

您无法在运行时存储/写入res / drawable。但是您可以更改程序以使用其他存储形式参考此 http://developer.android.com/guide/topics/data/data-storage.html

答案 2 :(得分:0)

首先,你无法在res / drawable中保存你的图像,因为一旦部署了.apk文件,资源就无法改变。

但您可以使用应用程序的缓存目录。它是属于您的应用程序的非公共文件夹,将在卸载时删除。此外,如果设备空间不足,系统可以从该目录中删除。它可以通过以下方式访问:

context.getCacheDir()

注意虽然文档说:

你不应该依赖系统为你删除这些文件;你应该总是有一个合理的最大值,例如1 MB,用于缓存文件所占用的空间量,并在超过该空间时修剪这些文件

如果您需要大量空间而宁愿使用SD卡,也可以致电

 getExternalCacheDir()

代替。这些也将在卸载时删除,但系统不会监视外部存储中的可用空间,因此如果空间不足则不会自动删除这些文件。如果使用此选项,您还应检查外部存储是否可用

Environment.getExternalStorageState()

Environment.getExternalStorageState() 在尝试写入之前。