ContentProviderを使用してください

外部のお問い合わせは、削除のために内部使用のContentProviderは、その後、ContentResolverのは、別のmodle年のデータを解析し使用して、ContentProviderの露光データを使用し、最初のsqliteの学生を使用してデータベース・テーブルを作成、外側のクエリの使用ContentResolverのを削除し、インターフェイスを公開します

パブリック クラスはAppCompatActivity {延びてMainActivity 

    @Overrideは

    保護され 、ボイドのonCreate(バンドルsavedInstanceState){ 
        ; super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main); 
// ここでのContentProviderではないが、限り、構成ファイル内のステートメントを実行することができますよう、オブジェクトを作成します一度だけ作成、作成した証明するために、「作成」、二度目はOnCreate関数実行されないの出力
         // 方法は、OnCreateの方法を再作成し、実行し、削除し、データベースファイルのデータ/データ/パッケージ名で見つけることができます


    } 
}

以上が主な活動であります

パブリック クラスSQLiteOpenHelper {延びMysqlite 
    SQLiteDatabase readableDatabaseと、
    公衆Mysqlite(コンテキスト・コンテキスト){ 
        スーパー(文脈、" 学生"NULL2 ); 
        readableDatabase = getWritableDatabase(); // 任意の許可を必要としないデータベースを作成するが、コードのこの行がなければなりません書き込み
    } 

    @Override 
    公共 ボイドのonCreate(SQLiteDatabase DB){ 

        db.execSQL(" 作成表学生(ID INTEGER、VARCHAR名)" 
        。システムOUTの .println(" 作成"); 
    } 

    @Override 
    公共 ボイド ONUPGRADE(SQLiteDatabase DB、INT oldVersion、INT NEWVERSION){ 

    } 
}

上記は、データベースを作成することです

パブリック クラスのContentProviderを拡張MyContentProvider { 
    Mysqlite mysqlite; 
    SQLiteDatabase SQLiteDatabase; 

    プライベート 静的最終UriMatcher uriMatcher; // 静的ジョブ持っている必要があります

    静的を{ 
         uriMatcher = 新新UriMatcher(UriMatcher.NO_MATCH); 
        uriMatcher.addURI(" com.january.summer "" 学生"0); // 最初の行のテーブル 
        uriMatcher.addURI(" com.january.summer "" 学生"1 ); 
        uriMatcher.addURI(" com.january.summer "" 学生"2 ); 
    } 
    パブリックMyContentProvider(){ 

    } 

    @Override 
    公共 INT 削除(URI URI、選択文字列、文字列[] selectionArgs){ 

        int型 deleteInt = 0 ; 
        deleteInt = sqLiteDatabase.delete(" 学生"、選択、selectionArgs);   // パラメータ1:表2パラメータ名:制約列3削除するパラメータの名前:特定の行の値
       スイッチ(uriMatcher.match(URI)){
            ケース 0
               deleteInt = sqLiteDatabase.delete(" 学生" 、選択、selectionArgs)。
              システム。アウト .println(" 删除第一行" );
               破ります ; ケース 1 
               DeleteIdは文字列 = uri.getPathSegments()。取得1 ); 
               deleteInt = sqLiteDatabase.delete(" 学生"" ID =?"新たな文字列[] {DeleteIdは})。
               システム。でる.println(" 第二の行を削除" );
               BREAK ;
             ケース 2 
               sqLiteDatabase.delete(" 学生" 、選択、selectionArgs) システムOUTの .println(" 第三の行を削除" );
                BREAKは
       } 
        戻りdeleteIntを; 


    } 

    @Override 
    パブリック文字列のgetType(URI URI){
         戻り NULL ; 
    } 

    @Override 
    公衆URIは、URI(URI、ContentValues値){挿入
        sqLiteDatabase.insert(" 学生"NULL 、値)。
       getContext()getContentResolver()notifyChange(URI、。。ヌル);
        戻りURI。

    } 

    @Override 
    パブリックブールのonCreate(){ 
        mysqlite = 新しいMysqlite(のgetContext())。
        sqLiteDatabase = mysqlite.getWritableDatabase()。

        返す ; 
    } 


    @Override 
    公共カーソルクエリ(URIのURI、文字列[]投影、ストリング選択、 
                        文字列[] selectionArgs、文字列はsortOrder){

        返す sqLiteDatabase.query(" 学生"、投影、選択、selectionArgs、ヌルヌルヌルを;)
         // 独自の検索機能を実装する必要があり、外部プログラムが照会でき
    } 

    @Override 
    公共 int型の更新を(URI URI、ContentValues値、選択文字列、
                      文字列[] selectionArgs){ 

        戻り 0 ; 
    } 
}

上記はContentProviderのです

  < アプリケーション
        アンドロイド:allowBackup = " " 
        のandroid:アイコン = " @ミップマップ/ ic_launcher " 
        アンドロイド:ラベル = " @文字列/ APP_NAME " 
        アンドロイド:roundIcon = " @ミップマップ/ ic_launcher_round " 
        アンドロイド:supportsRtl = " " 
        のandroid:テーマ = " @スタイル/ AppTheme " > 
        < プロバイダの
            アンドロイド:名 = " 。MyContentProvider "
            アンドロイド:当局 = " com.january.summer " 
            アンドロイド:有効 = " " 
            のandroid:エクスポート = " 真の" > </プロバイダ> 


        <活動のアンドロイド:名= " .MainActivity " > 
            <意図-フィルタ> 
                <アクションアンドロイド:名前= " android.intent.action.MAIN " /> 

                <カテゴリアンドロイド:名= " android.intent.category.LAUNCHER " /> 
            </インテント・フィルタ> 
        </活性>
    </アプリケーション>

上記は、設定ファイルである//

/////////////

パブリック クラスMainActivityはAppCompatActivity {延び

    @Overrideが
    保護 ボイドのonCreate(バンドルsavedInstanceState){ 
        super.onCreate(savedInstanceState)を、
        setContentView(R.layout.activity_main)。
        ウリのuri = Uri.parse(" 内容://com.january.summer/student " ); 

        ContentValues contentValues = 新しいContentValues(); 
        contentValues.put(" 名前"" 小明" ); 
        getContentResolver()(URI、contentValues)を挿入。

        カーソルbookCursor= getContentResolver()クエリ(URI、新しい文字列[] { " ID "" 名前" }、NULLNULLNULL );
        int型のカウント= bookCursor.getCount(); 
        システム。アウト .println(" 行数" + カウント数)。

        。getContentResolver()を削除(URI、" 名前=?"新たな文字列[] { " 小の明" })。

        もし(bookCursor!= nullの){
            bookCursor.moveToFirst(); 
            一方、(bookCursor.moveToNext()){ 
                システム。アウト .println(" ID:" + bookCursor.getInt(bookCursor.getColumnIndex(" ID " ))
                         + "       名:" + bookCursor.getString(bookCursor.getColumnIndex(" 名前" )))。
            } 
            bookCursor.close()。
        } 




    } 
    }

上記別のmodleの主な活動であり、挿入されたデータの各動作は、カーソルは、必ずしもカーソルが最初の行の先頭に移動するようmovetofirst、現時点ではデータが、最初の行MoveToNextを使用しなくてもよいがあり、最初の行に挿入されていませんデバッグテストは、より明確に確認してください

おすすめ

転載: www.cnblogs.com/Ocean123123/p/10958845.html