【问题标题】:Can I save images in mode_private?我可以在 mode_private 中保存图像吗?
【发布时间】:2013-03-16 21:18:14
【问题描述】:

目前我使用以下方法将 XML 文件保存在 mode_private 中:

public void Save_Data(String filename, String Datastring, Context context) {
    FileOutputStream fos;

    try {
        fos = context.openFileOutput(filename, context.MODE_PRIVATE);
        fos.write(Datastring.getBytes());
        fos.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

我想在 mode_private 中将 URL 中大约 5kb 的小图像保存到我的应用程序空间中。是否可以在 mode_private 中保存图像?如果是这样,谁能告诉我如何修改下面的方法来做到这一点?

public void DownloadFromUrl(final String DownloadUrl, final String fileName) {


    Thread web = new Thread(){
        public void run(){


       try {
               File root = Environment.getExternalStorageDirectory();               

               File dir = new File (root.getAbsolutePath() + "/Chats");
               if(dir.exists()==false) {
                    dir.mkdirs();
               }

               URL url = new URL(DownloadUrl); //you can write here any link
               File file = new File(dir, fileName);

               long startTime = System.currentTimeMillis();
               Log.d("DownloadManager", "download begining");
               Log.d("DownloadManager", "download url:" + url);
               Log.d("DownloadManager", "downloaded file name:" + fileName);

               /* Open a connection to that URL. */
               URLConnection ucon = url.openConnection();

               /*
                * Define InputStreams to read from the URLConnection.
                */
               InputStream is = ucon.getInputStream();
               BufferedInputStream bis = new BufferedInputStream(is);

               /*
                * Read bytes to the Buffer until there is nothing more to read(-1).
                */
               ByteArrayBuffer baf = new ByteArrayBuffer(5000);
               int current = 0;
               while ((current = bis.read()) != -1) {
                  baf.append((byte) current);
               }


               /* Convert the Bytes read to a String. */
               FileOutputStream fos = new FileOutputStream(file);
               fos.write(baf.toByteArray());
               fos.flush();
               fos.close();
               Log.d("DownloadManager", "download ready in " + ((System.currentTimeMillis() - startTime) / 1000) + " sec");

       } catch (IOException e) {
           Log.d("DownloadManager", "Error: " + e);
       }

        }
        };
        web.start();
    }

【问题讨论】:

    标签: java android url download


    【解决方案1】:

    所以我终于想出了如何在 mode_private 中保存图像

    以下方法获取一个位图并将其保存到您的应用程序私有空间中的 mode_private。

     public String writeFileToInternalStorage(Bitmap outputImage){
            String fileName = fileName + ".png";
    
            FileOutputStream fos = null;
      try {
       fos = openFileOutput(fileName, Context.MODE_PRIVATE);
      } catch (FileNotFoundException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
            outputImage.compress(Bitmap.CompressFormat.PNG, 90, fos);
    
      return fileName;
        }
    

    这会从应用程序的私有空间读取图像并将其转换为位图:

     Bitmap bitmap = BitmapFactory.decodeFile(this.getApplicationContext().getFilesDir() + "/"+fileName);
    

    希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

      根据 Randrm 的回答,我实现了以下两种方法来存储/检索应用程序私有数据空间中 ImageView 中存在的位图图像。基本上是他的答案的清理版本,取自编译代码。

      如果您希望 Activity 在恢复时快速恢复其视图的内容,这可能会很有用。 ImageView 由 R.string.myImage 标识,该位图通过类的 myBitmap 成员访问。

      @Override
      public void onSaveInstanceState(Bundle savedInstanceState) {
          // we will be stopped and perhaps later on destroyed;
          // store displayed image for quick retrieval in private data space
          try {
              FileOutputStream output =
                 openFileOutput(this.getString(R.string.myImage), Context.MODE_PRIVATE);
              myBitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
          } catch (Exception e) {
              Log.e(LOG_TAG, "could not save image to private space");
          }
      
          // superclass to save the view hierarchy state
          super.onSaveInstanceState(savedInstanceState);
      }
      
      @Override
      public void onRestoreInstanceState(Bundle savedInstanceState) {
          // superclass to restore the view hierarchy
          super.onRestoreInstanceState(savedInstanceState);
      
          // retrieve image stored earlier
          try {
              FileInputStream input = openFileInput(this.getString(R.string.myImage));
              ((ImageView) findViewById(R.id.det_mainimage)).
                setImageBitmap(BitmapFactory.decodeStream(input));            
          } catch (Exception e) {
              Log.e(LOG_TAG, "could not retrieve image from private space");
          }
      }
      

      享受吧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 2011-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多