2013-03-16 61 views
0

目前我使用下面的方法保存在MODE_PRIVATE的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(); 
    } 

} 

我想从URL保存大约一个小图像约5KB到MODE_PRIVATE我的应用空间。是否有可能将图像保存在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(); 
    } 

回答

1

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

如果您希望活动在恢复时快速恢复其视图内容,可能会有用。 ImageView由R.string.myImage id,即通过类的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"); 
    } 
} 

享受。

6

所以,我终于想通了如何保存在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); 

希望这是有帮助的人。

相关问题