<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-348  評論-598  文章-0  trackbacks-0
    在Android中,我們的應用有的時候需要對外提供數據接口,可以有如下幾種方法:1)AIDL 2)Broadcast 3)ContentProvider。
    使用AIDL需要我們編寫AIDL接口以及實現,而且對方也要有相應的接口描述,有點麻煩;使用Broadcast,我們不需要任何接口描述,只要協議文檔就可以了,但是有點不好就是,這種方式不直接而且是異步的;使用ContentProvider我們不需要接口描述,只需要知道協議,同時這種方式是同步的,使用方便。下面是ContentProvider實現:
    /**
     * 
     
    */

    package com.backgroundservice;

    import android.content.ContentProvider;
    import android.content.ContentValues;
    import android.content.UriMatcher;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteQueryBuilder;
    import android.net.Uri;
    import android.util.Log;

    /**
     * TODO
     * 
     * 
    @author tianlu
     * 
    @version 1.0 Create At : 2010-2-18 下午01:58:39
     
    */

    public class TestContentProvider extends ContentProvider {
        
    private SQLiteDatabase mDb;
        
    private DatabaseHelper mDbHelper = null;
        
    private static final String DATABASE_NAME = "rssitems.db";
        
    private static final String DATABASE_TABLE_NAME = "rssItems";
        
    private static final int DB_VERSION = 1;
        
    private static final int ALL_MESSAGES = 1;
        
    private static final int SPECIFIC_MESSAGE = 2;

        
    // Set up our URL matchers to help us determine what an
        
    // incoming URI parameter is.
        private static final UriMatcher URI_MATCHER;
        
    static {
            URI_MATCHER 
    = new UriMatcher(UriMatcher.NO_MATCH);
            URI_MATCHER.addURI(
    "test""item", ALL_MESSAGES);
            URI_MATCHER.addURI(
    "test""item/#", SPECIFIC_MESSAGE);
        }


        
    // Here's the public URI used to query for RSS items.
        public static final Uri CONTENT_URI = Uri
                .parse(
    "content://test/item");

        
    // Here are our column name constants, used to query for field values.
        public static final String ID = "_id";
        
    public static final String NAME = "NAME";
        
    public static final String VALUE = "VALUE";
        
    public static final String DEFAULT_SORT_ORDER = ID + " DESC";

        
    private static class DatabaseHelper extends AbstractDatabaseHelper {

            @Override
            
    protected String[] createDBTables() {
                
    // TODO Auto-generated method stub
                String sql = "CREATE TABLE " + DATABASE_TABLE_NAME + "(" + ID
                        
    + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME + " TEXT,"
                        
    + VALUE + " TEXT);";
                
    return new String[] { sql };
            }


            @Override
            
    protected String[] dropDBTables() {
                
    // TODO Auto-generated method stub
                return null;
            }


            @Override
            
    protected String getDatabaseName() {
                
    // TODO Auto-generated method stub
                return DATABASE_NAME;
            }


            @Override
            
    protected int getDatabaseVersion() {
                
    // TODO Auto-generated method stub
                return DB_VERSION;
            }


            @Override
            
    protected String getTag() {
                
    // TODO Auto-generated method stub
                return TestContentProvider.class.getSimpleName();
            }


        }


        
    /**
         * 
         
    */

        
    public TestContentProvider() {
            
    // TODO Auto-generated constructor stub
            
        }


        
    /*
         * (non-Javadoc)
         * 
         * @see android.content.ContentProvider#delete(android.net.Uri,
         * java.lang.String, java.lang.String[])
         
    */

        @Override
        
    public int delete(Uri uri, String selection, String[] selectionArgs) {
            
    // NOTE Argument checking code omitted. Check your parameters!
            int rowCount = mDb.delete(DATABASE_TABLE_NAME, selection, selectionArgs);

            
    // Notify any listeners and return the deleted row count.
            getContext().getContentResolver().notifyChange(uri, null);
            
    return rowCount;
        }


        
    /*
         * (non-Javadoc)
         * 
         * @see android.content.ContentProvider#getType(android.net.Uri)
         
    */

        @Override
        
    public String getType(Uri uri) {
            
    switch (URI_MATCHER.match(uri)) {
            
    case ALL_MESSAGES:
                
    return "vnd.android.cursor.dir/rssitem"// List of items.
            case SPECIFIC_MESSAGE:
                
    return "vnd.android.cursor.item/rssitem"// Specific item.
            default:
                
    return null;
            }

        }


        
    /*
         * (non-Javadoc)
         * 
         * @see android.content.ContentProvider#insert(android.net.Uri,
         * android.content.ContentValues)
         
    */

        @Override
        
    public Uri insert(Uri uri, ContentValues values) {
            
    // NOTE Argument checking code omitted. Check your parameters! Check that
            
    // your row addition request succeeded!

           
    long rowId = -1;
           rowId 
    = mDb.insert(DATABASE_TABLE_NAME, NAME, values);
           Uri newUri 
    = Uri.withAppendedPath(CONTENT_URI, ""+rowId);
           Log.i(
    "TestContentProvider""saved a record " + rowId + " " + newUri);
           
    // Notify any listeners and return the URI of the new row.
           getContext().getContentResolver().notifyChange(CONTENT_URI, null);
           
    return newUri;
        }


        
    /*
         * (non-Javadoc)
         * 
         * @see android.content.ContentProvider#onCreate()
         
    */

        @Override
        
    public boolean onCreate() {
            
    // TODO Auto-generated method stub
            try
            
    {
                mDbHelper 
    = new DatabaseHelper();
                mDbHelper.open(getContext());
                mDb 
    = mDbHelper.getMDb();
            }
    catch(Exception e){
                e.printStackTrace();
            }

            
    return true;
        }


        
    /*
         * (non-Javadoc)
         * 
         * @see android.content.ContentProvider#query(android.net.Uri,
         * java.lang.String[], java.lang.String, java.lang.String[],
         * java.lang.String)
         
    */

        
    public Cursor query(Uri uri, String[] projection, String selection,
                String[] selectionArgs, String sortOrder) 
    {
            
    // We won't bother checking the validity of params here, but you should!

            
    // SQLiteQueryBuilder is the helper class that creates the
            
    // proper SQL syntax for us.
            SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();

            
    // Set the table we're querying.
            qBuilder.setTables(DATABASE_TABLE_NAME);

            
    // If the query ends in a specific record number, we're
            
    // being asked for a specific record, so set the
            
    // WHERE clause in our query.
            if((URI_MATCHER.match(uri)) == SPECIFIC_MESSAGE){
                qBuilder.appendWhere(
    "_id=" + uri.getLastPathSegment());
                Log.i(
    "TestContentProvider""_id=" +  uri.getLastPathSegment());
            }



            
    // Make the query.
            Cursor c = qBuilder.query(mDb,
                    projection,
                    selection,
                    selectionArgs,
                    
    null,
                    
    null,
                    sortOrder);
            Log.i(
    "TestContentProvider""get records");
            c.setNotificationUri(getContext().getContentResolver(), uri);
            
    return c;
        }


        
    /*
         * (non-Javadoc)
         * 
         * @see android.content.ContentProvider#update(android.net.Uri,
         * android.content.ContentValues, java.lang.String, java.lang.String[])
         
    */

        @Override
        
    public int update(Uri uri, ContentValues values, String selection,
                String[] selectionArgs) 
    {
            
    // NOTE Argument checking code omitted. Check your parameters!
            int updateCount = mDb.update(DATABASE_TABLE_NAME, values, selection, selectionArgs);

            
    // Notify any listeners and return the updated row count.
            getContext().getContentResolver().notifyChange(uri, null);
            
    return updateCount;
        }


    }

    配置文件如下:
            <provider android:name="TestContentProvider"
                android:authorities
    ="test">
            
    </provider>
    在客戶端中可以使用如下方法進行調用:
                    ContentValues values = new ContentValues();
                    values.put(TestContentProvider.NAME, 
    "testname1");
                    values.put(TestContentProvider.VALUE, 
    "testvalu1e");
                    Uri newAddUri 
    = TestActivity.this.getContentResolver().insert(TestContentProvider.CONTENT_URI, values);
                    Cursor c 
    = TestActivity.this.managedQuery(newAddUri, new String[]{TestContentProvider.NAME}nullnullnull);
                    Log.i(
    "TestActivity""" + c.getCount());
                    
    if(c.moveToNext())
                    
    {
                        Log.i(
    "TestActivity", c.getString(0));
                    }
    上面的代碼是先進行插入,然后進行查詢并打印。就是如此簡單,所有的應用如果需要都可以對外方便的提供數據接口,同時其他應用也可以很方便的進行調用。


    ---------------------------------------------------------
    專注移動開發

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2010-02-18 19:25 TiGERTiAN 閱讀(21425) 評論(0)  編輯  收藏 所屬分類: JavaAndroid
    主站蜘蛛池模板: 4虎永免费最新永久免费地址| 国产精品亚洲综合久久| 亚洲熟妇无码乱子AV电影| 国产不卡免费视频| 国产乱弄免费视频| 成人亚洲综合天堂| 亚洲福利精品电影在线观看| 一本色道久久88综合亚洲精品高清| 国产人成免费视频| 亚洲AV无码乱码精品国产| 亚洲爽爽一区二区三区| 中文字幕第13亚洲另类| 在线亚洲人成电影网站色www| 亚洲日韩欧洲无码av夜夜摸| 亚洲国产精品嫩草影院在线观看 | 黄色短视频免费看| 国产精品免费观看视频| a在线视频免费观看| 99ee6热久久免费精品6| 四虎最新永久免费视频| 在线观看成人免费视频| 免费h成人黄漫画嘿咻破解版| 亚洲色欲久久久久综合网| 亚洲情综合五月天| 久久丫精品国产亚洲av| 亚洲乱码在线卡一卡二卡新区| 亚洲hairy多毛pics大全| 一级午夜免费视频| 99热免费在线观看| 青青青国产在线观看免费| 国产网站在线免费观看| 久久久亚洲精品蜜桃臀| 亚洲国产精品线在线观看| 亚洲人成网站看在线播放| 国产精品久久久久久亚洲小说 | 亚洲精品综合久久中文字幕 | 久久久久一级精品亚洲国产成人综合AV区| 久久久久亚洲AV综合波多野结衣| 亚洲成人在线电影| 亚洲中文字幕无码爆乳app| 一级人做人a爰免费视频|