簡體   English   中英

如何將圖像保存在我的應用程序數據庫而不是 SD 卡中

[英]How to save the images in my application database rather then sd-card

我使用 SPenSdk 庫創建了一個應用程序。 我的應用程序只需打開一個canvasView然后將該畫布視圖作為圖像保存在 SD 卡中。 現在,當用戶從設備中取出 SD 卡時會出現問題。 那時當我運行我的應用程序時它崩潰了,因為它無法找到要加載的圖像。 那么有什么方法可以保存使用畫布視圖創建的圖像,使其成為我的應用程序的一部分。 所以刪除sd卡不會影響應用程序。

在 SdCard 中保存圖像的代碼

public class CanvasActivity extends Activity 
{
public static final String DEFAULT_APP_IMAGEDATA_DIRECTORY = "/mnt/sdcard/SmemoExample";

private File        m_Folder = null;

private String      m_FileName;

public static final String SAVED_FILE_EXTENSION = "png";

public static final String EXTRA_IMAGE_PATH = "path";
public static final String EXTRA_IMAGE_NAME = "filename";

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);
    
    m_Folder        = new File(DEFAULT_APP_IMAGEDATA_DIRECTORY);
    
    m_FileName = getIntent().getStringExtra(EXTRA_IMAGE_NAME);        
    loadCanvas(m_FileName);
}

public boolean saveCanvas() 
{
    byte[] buffer = m_CanvasView.getData();

    if (buffer == null)
        return false;
    if (!(m_Folder.exists()))
        m_Folder.mkdirs();
    
    String savePath = null;
    if(m_FileName == null)
    {
        savePath = m_Folder.getPath() + '/' + UtilitiesActivity.getUniqueFilename(m_Folder, "image", SAVED_FILE_EXTENSION);
    }
    else
    {
        savePath = m_Folder.getPath() + '/' + m_FileName;
    }

    if (UtilitiesActivity.writeBytedata(savePath, buffer))
        return true;
    else
        return false;
}

public boolean loadCanvas(String fileName) 
{
    String loadPath = m_Folder.getPath() + '/' + fileName;
   
    byte[] buffer = UtilitiesActivity.readBytedata(loadPath);

    if (buffer == null)
        return false;

    m_CanvasView.setData(buffer);

    return true;
}

private CanvasView.OnHistoryChangeListener historyChangeListener = new CanvasView.OnHistoryChangeListener() 
{
    @Override
    public void onHistoryChanged(boolean bUndoable, boolean bRedoable) 
    {
        m_UndoButton.setEnabled(bUndoable);
        m_RedoButton.setEnabled(bRedoable);
    }
};

CanvasView.InitializeFinishListener mInitializeFinishListener = new CanvasView.InitializeFinishListener() {

    @Override
    public void onFinish() {
        Bitmap bg = BitmapFactory.decodeResource(getResources(), R.drawable.canvas_bg);
        m_CanvasView.setBackgroundImage(bg);
        bg.recycle();
    }
};
}

問題不在於數據庫或非數據庫問題在於您的圖像在哪里。 設備上的空間有限,但如果您不想將圖像存儲在 SD 卡上,您應該將它們存儲在設備的板載內存中。 將它們填充到數據庫 blob 中對您沒有幫助(實際上,它只會讓事情變得更復雜)。

這是你的方法: http : //developer.android.com/guide/topics/data/data-storage.html#filesInternal

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM