外部のお問い合わせは、削除のために内部使用の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(コンテキスト・コンテキスト){ スーパー(文脈、" 学生"、NULL、2 ); 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 "、" 名前" }、NULL、NULL、NULL ); 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を使用しなくてもよいがあり、最初の行に挿入されていませんデバッグテストは、より明確に確認してください