2014-09-20 51 views
0

我正在getiing一個頁面的xml內容,並解析從這個XML的所有圖像Url的URL。 然後,我使用位圖將圖像顯示在imageviwer中。此外,我需要該圖像用於我的下一個版面設計。如何存儲圖像以供進一步使用,如果能夠如何操作,我可以將圖像存儲在可繪製文件夾中。我剛纔提到在下面,我需要保存的ImageView內容繪製文件夾中的代碼..Inputstream無法連接到一個URL

  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. 
     } 
     } 

回答

0

我建議不要自己去實現它,而是採取衆所周知庫,可以爲你做。例如,Picasso具有適合您需要的功能。您只需通過一個URL,它和畢加索將在下次使用一個緩存文件夾中下載和保存圖像:

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

所有你需要做的是要分析這些圖像的URL,並在內存中存儲一​​些。

0

首先,你不能保存youur在水庫圖像/繪製因爲一旦部署了.apk文件,資源就無法更改。

但是,您可以使用應用程序的緩存目錄。這是一個屬於您的應用程序的非公共文件夾,將在卸載時被刪除。此外,如果設備的空間不足,系統可能會從此目錄中刪除。

context.getCacheDir() 

不過要注意的是,文件說:它可以通過訪問

你不應該依賴系統中刪除這些文件,你的;你應該始終有一個合理的最大值,如1 MB,爲的空間,你有緩存文件佔用量,並清理這些文件超過了空間

時,如果你需要一個很大的空間,並會而是使用可以撥打的SD卡

getExternalCacheDir() 

改爲。這些在卸載時也會被刪除,但系統不會監視外部存儲空間的可用空間,因此如果空間不足,將不會自動刪除這些文件。如果使用此選項,您還應該檢查外部存儲可與

Environment.getExternalStorageState() 

Environment.getExternalStorageState() 試圖寫入之前。