2015-12-02 41 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); 
          } 
         }); 

毕加索有自己的缓存你不会需要自己处理任何东西。