zoukankan      html  css  js  c++  java
  • Adding a File to a Content Provider

      Occasionally, you might need to store a file in a database. The usual approach is to save
    the file to disk and then update the record in the database that points to the
    corresponding file name. 
    Android takes this protocol and automates it by defining a specific procedure for saving
    and retrieving these files. Android uses a convention where a reference to the file name
    is saved in a record with a reserved column name of _data. 
    When a record is inserted into that table, Android returns the URI to the caller. Once you
    save the record using this mechanism, you also need to follow it up by saving the file in
    that location. To do this, Android allows ContentResolver to take the Uri of the database
    record and return a writable output stream. Behind the scenes, Android allocates an
    internal file and stores the reference to that file name in the _data field.
    If you were to extend the Notepad example to store an image for a given note, you could
    create an additional column called _data and run an insert first to get a URI back. The
    following code demonstrates this part of the protocol: 
    ContentValues values = new ContentValues();
    values.put("title", "New note");
    values.put("note","This is a new note");
     
    //Use a content resolver to insert the record
    ContentResolver contentResolver = activity.getContentResolver();
    Uri newUri = contentResolver.insert(Notepad.Notes.CONTENT_URI, values);
    Once you have the URI of the record, the following code asks the ContentResolver to
    get a reference to the file output stream: 
    ….
    //Use the content resolver to get an output stream directly
    //ContentResolver hides the access to the _data field where 
    //it stores the real file reference.
    OutputStream outStream = activity.getContentResolver().openOutputStream(newUri);
    someSourceBitmap.compress(Bitmap.CompressFormat.JPEG, 50, outStream);
    outStream.close();
    The code then uses that output stream to write to.

  • 相关阅读:
    浅析C++中的this指针
    转:函数指针数组的妙用(I)
    函数指针与函数指针数组的使用方法
    指针函数与函数指针的区别
    二叉树的镜像
    树的子结构
    Irrlicht 3D Engine 笔记系列 之 教程5- User Interface
    Android获取当前连接的wifi名称
    dlopen 方式调用 Linux 的动态链接库
    Appium基于安卓的各种FindElement的控件定位方法实践和建议
  • 原文地址:https://www.cnblogs.com/enricozhang/p/1750332.html
Copyright © 2011-2022 走看看