2015-12-02 62 views
0

我對畢加索不太熟悉,但我的應用程序使用它來從其URL中加載圖像。
但是我想製作一個按鈕,當它被點擊時,它會將圖像標記爲收藏夾,即使在脫機狀態下也會顯示它。
我正在用Content Provider保存其他東西(字符串,雙打)。

所以,我認爲最好的方法是保存圖像以顯示即使離線。
但是,如何保存它們?如何使用畢加索保存和顯示圖像

回答

0

下載帶有網址的圖片還有一個不錯的選擇。試試這個代碼。

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    new DownloadFile().execute("https://i.stack.imgur.com/w4kCo.jpg"); 
} 
class DownloadFile extends AsyncTask<String,Integer,Long> { 
    ProgressDialog mProgressDialog = new ProgressDialog(MainActivity.this);// Change Mainactivity.this with your activity name. 
    String strFolderName; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgressDialog.setMessage("Downloading Image ..."); 
     mProgressDialog.setIndeterminate(false); 
     mProgressDialog.setMax(100); 
     mProgressDialog.setCancelable(false); 
     mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     mProgressDialog.show(); 
    } 
    @Override 
    protected Long doInBackground(String... aurl) { 
     int count; 
     try { 
      URL url = new URL((String) aurl[0]); 
      URLConnection conexion = url.openConnection(); 
      conexion.connect(); 
      String targetFileName="downloadedimage.jpg";//Change name and subname 

      int lenghtOfFile = conexion.getContentLength(); 
      String PATH = Environment.getExternalStorageDirectory()+"/myImage/"; 
      File folder = new File(PATH); 
      if(!folder.exists()){ 
       folder.mkdir();//If there is no folder it will be created. 
      } 
      InputStream input = new BufferedInputStream(url.openStream()); 
      OutputStream output = new FileOutputStream(PATH+targetFileName); 
      byte data[] = new byte[1024]; 
      long total = 0; 
      while ((count = input.read(data)) != -1) { 
       total += count; 
         publishProgress ((int)(total*100/lenghtOfFile)); 
       output.write(data, 0, count); 
      } 
      output.flush(); 
      output.close(); 
      input.close(); 
     } catch (Exception e) {} 
     return null; 
    } 
    protected void onProgressUpdate(Integer... progress) { 
     mProgressDialog.setProgress(progress[0]); 
     if(mProgressDialog.getProgress()==mProgressDialog.getMax()){ 
      mProgressDialog.dismiss(); 

      Toast.makeText(getApplicationContext(), "Download Completed !", Toast.LENGTH_LONG).show(); 

     } 
    } 
    protected void onPostExecute(String result) { 
    } 
} 

並將下載的圖像位圖設置爲Imageview。

0

這是代碼。通過這種策略,畢加索將在緩存中查找圖像,如果失敗,則圖像將通過網絡下載。

 Picasso.with(context) 
         .load(Uri.parse(getItem(position).getStoryBigThumbUrl())) 
         .networkPolicy(NetworkPolicy.OFFLINE) 
         .into(holder.storyBigThumb, new Callback() { 
          @Override 
          public void onSuccess() { 

          } 

          @Override 
          public void onError() { 
           // Try again online if cache failed 
           Picasso.with(context) 
             .load(Uri.parse(getItem(position) 
               .getStoryBigThumbUrl())) 
           .placeholder(R.drawable.user_placeholder) 
           .error(R.drawable.user_placeholder_error) 
             .into(holder.storyBigThumb); 
          } 
         }); 

畢加索有自己的緩存你不會需要自己處理任何東西。