AndroidデータストアのsharedpreferencesとContent Provider
Androidには、次のようなデータ操作が含まれています.
file,sqlite 3,Preferences,ContectResolverとContentProviderの前の3つのデータ操作方式はいずれも本アプリケーション内のデータに対してのみであり,プログラムはこの3つの方法で他のアプリケーション内のデータを操作することはできない.
ここでsqlite 3は前節で述べたように、この節には主にsharedpreferencesとContentProviderが含まれています.
sharedpreferences保存データ
以上のコードを実行すると、SharedPreferencesはこれらのデータをtestに保存します.xmlファイルでは、File Explorerのdata/data/対応するパッケージ名/test.xmlでファイルをエクスポートし、表示します.
2、SharedPreferencesを用いてデータを読み取る方法は以下の通りである.
コンテンツプロバイダ
manifestファイルに登録すると、アンドロイドの4つのコンポーネントが登録されます.
他の呼び出し元にアクセスするためのアクセスパスの設定
主な方法:
public boolean onCreate()ContentProviderの作成時に呼び出す
public Cursor query(Uri,String[],String,String[],String)は、指定したUriのContentProviderをクエリーし、Cursorを返します.
public Uri insert(Uri,ContentValue)は、指定したUriのContentProviderにデータを追加するために使用されます.
public int update(Uri,ContentValue,String,String[])は、指定したUriのContentProviderのデータを更新するために使用されます.
public int delete(Uri,String,String[])は、指定したUriのContentProviderからデータを削除するために使用されます.
public String getType(Uri)指定したUriのデータを返すMIMEタイプ
*操作データが集合型である場合、MIME型文字列はvndであるべきである.android.cursor.dir/先頭.
たとえば、すべてのpersonレコードを取得するUriはcontent://contacts/personでは、返されるMIMEタイプ文字列は「vnd.android.cursor.dir/person”.
*操作するデータが集合型以外のデータである場合、MIME型文字列はvndであるべきである.android.cursor.item/冒頭.
例えば、idが10のpersonレコードを取得するUriはcontent://contacts/person/10では、返されるMIMEタイプ文字列は「vnd.android.cursor.item/person”.
メソッド実装
クエリー方法
挿入方法
メソッド実装の削除
更新メソッドの実装
取得タイプ
注意:*操作データが集合タイプに属する場合、MIMEタイプ文字列はvndであるべきである.android.cursor.dir/先頭.
たとえば、すべてのpersonレコードを取得するUriはcontent://contacts/personでは、返されるMIMEタイプ文字列は「vnd.android.cursor.dir/person”.
*操作するデータが集合型以外のデータである場合、MIME型文字列はvndであるべきである.android.cursor.item/冒頭.
例えば、idが10のpersonレコードを取得するUriはcontent://contacts/person/10では、返されるMIMEタイプ文字列は「vnd.android.cursor.item/person”.
例えばここではvndを用いる.android.cursor.dir先頭
ContentResolverは、コンテンツプロバイダが提供するデータを解析します.外部アプリケーションがContentProviderのデータの追加、削除、変更、クエリー操作を行う必要がある場合は、ContentResolverクラスを使用して完了できます.ContentResolverオブジェクトを取得するには、Contextが提供するgetContentResolver()メソッドを使用します.
インプリメンテーションの挿入
インプリメンテーションの削除
実装の更新
クエリの実装
コンテンツプロバイダとsharedpreferencesの完了
file,sqlite 3,Preferences,ContectResolverとContentProviderの前の3つのデータ操作方式はいずれも本アプリケーション内のデータに対してのみであり,プログラムはこの3つの方法で他のアプリケーション内のデータを操作することはできない.
ここでsqlite 3は前節で述べたように、この節には主にsharedpreferencesとContentProviderが含まれています.
sharedpreferences保存データ
// SharedPreferences ( )
SharedPreferences mySharedPreferences= getSharedPreferences("test",
Activity.MODE_PRIVATE);
// SharedPreferences.Editor ( )
SharedPreferences.Editor editor = mySharedPreferences.edit();
// putString
editor.putString("name", "Karl");
editor.putString("habit", "sleep");
//
editor.commit();
// toast
Toast.makeText(this, " SharedPreferences!" , Toast.LENGTH_LONG).show();
以上のコードを実行すると、SharedPreferencesはこれらのデータをtestに保存します.xmlファイルでは、File Explorerのdata/data/対応するパッケージ名/test.xmlでファイルをエクスポートし、表示します.
2、SharedPreferencesを用いてデータを読み取る方法は以下の通りである.
// , SharedPreferences SharedPreferences
SharedPreferencessharedPreferences= getSharedPreferences("test",
Activity.MODE_PRIVATE);
// getString value, 2 value
String name =sharedPreferences.getString("name", "");
String habit =sharedPreferences.getString("habit", "");
// toast
Toast.makeText(this, " :"+"
"+"name:" + name + "
" + "habit:" + habit,
Toast.LENGTH_LONG).show();
コンテンツプロバイダ
manifestファイルに登録すると、アンドロイドの4つのコンポーネントが登録されます.
provider android:name="com.zj.sqlitedemo.providers.PersonContentProvider"
android:authorities="com.zj.sqlitedemo.providers.PersonContentProvider"
></provider>
他の呼び出し元にアクセスするためのアクセスパスの設定
private final static String authority ="com.zj.sqlitedemo.providers.PersonContentProvider";
private final static int PERSON_INSERT_CODE=0;
private final static int PERSON_DELETE_CODE=1;
private final static int PERSON_UPDATE_CODE=2;
private final static int PERSON_QUERY_ALL_CODE=3;
private final static UriMatcher uriMatcher;
private PersonSQLiteOpenHelper mOpenHelper;
static
{
uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
// URI
uriMatcher.addURI(authority, "person/insert", PERSON_INSERT_CODE);
uriMatcher.addURI(authority, "person/delete", PERSON_DELETE_CODE);
uriMatcher.addURI(authority, "person/update", PERSON_UPDATE_CODE);
uriMatcher.addURI(authority, "person/queryAll", PERSON_QUERY_ALL_CODE);
}
主な方法:
public boolean onCreate()ContentProviderの作成時に呼び出す
public Cursor query(Uri,String[],String,String[],String)は、指定したUriのContentProviderをクエリーし、Cursorを返します.
public Uri insert(Uri,ContentValue)は、指定したUriのContentProviderにデータを追加するために使用されます.
public int update(Uri,ContentValue,String,String[])は、指定したUriのContentProviderのデータを更新するために使用されます.
public int delete(Uri,String,String[])は、指定したUriのContentProviderからデータを削除するために使用されます.
public String getType(Uri)指定したUriのデータを返すMIMEタイプ
*操作データが集合型である場合、MIME型文字列はvndであるべきである.android.cursor.dir/先頭.
たとえば、すべてのpersonレコードを取得するUriはcontent://contacts/personでは、返されるMIMEタイプ文字列は「vnd.android.cursor.dir/person”.
*操作するデータが集合型以外のデータである場合、MIME型文字列はvndであるべきである.android.cursor.item/冒頭.
例えば、idが10のpersonレコードを取得するUriはcontent://contacts/person/10では、返されるMIMEタイプ文字列は「vnd.android.cursor.item/person”.
メソッド実装
クエリー方法
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
switch(uriMatcher.match(uri))
{
case PERSON_QUERY_ALL_CODE:
//
SQLiteDatabase db= mOpenHelper.getWritableDatabase();
if(db.isOpen())
{
Cursor cursor= db.query("person", projection, selection, selectionArgs,null,null,sortOrder);
return cursor;
}
break;
default:
throw new IllegalArgumentException("URI "+uri);
}
return null;
}
挿入方法
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
switch(uriMatcher.match(uri))
{
case PERSON_INSERT_CODE:
//
SQLiteDatabase db= mOpenHelper.getWritableDatabase();
if(db.isOpen())
{
long id=db.insert("person", null, values);
db.close();
return ContentUris.withAppendedId(uri, id);
}
break;
default:
throw new IllegalArgumentException("URI ");
}
return null;
}
メソッド実装の削除
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
switch(uriMatcher.match(uri))
{
case PERSON_DELETE_CODE:
//
SQLiteDatabase db= mOpenHelper.getWritableDatabase();
if(db.isOpen())
{
int count=db.delete("person", selection, selectionArgs);
db.close();
return count;
}
break;
default:
throw new IllegalArgumentException("URI "+uri);
}
return 0;
}
更新メソッドの実装
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
switch(uriMatcher.match(uri))
{
case PERSON_UPDATE_CODE:
//
SQLiteDatabase db= mOpenHelper.getWritableDatabase();
if(db.isOpen())
{
int count=db.update("person", values, selection, selectionArgs);
db.close();
return count;
}
break;
default:
throw new IllegalArgumentException("URI "+uri);
}
return 0;
}
取得タイプ
public String getType(Uri uri) {
// TODO Auto-generated method stub
switch(uriMatcher.match(uri))
{
case PERSON_QUERY_ALL_CODE:
return "vnd.android.cursor.dir/person";
default:
break;
}
return null;
}
注意:*操作データが集合タイプに属する場合、MIMEタイプ文字列はvndであるべきである.android.cursor.dir/先頭.
たとえば、すべてのpersonレコードを取得するUriはcontent://contacts/personでは、返されるMIMEタイプ文字列は「vnd.android.cursor.dir/person”.
*操作するデータが集合型以外のデータである場合、MIME型文字列はvndであるべきである.android.cursor.item/冒頭.
例えば、idが10のpersonレコードを取得するUriはcontent://contacts/person/10では、返されるMIMEタイプ文字列は「vnd.android.cursor.item/person”.
例えばここではvndを用いる.android.cursor.dir先頭
ContentResolverは、コンテンツプロバイダが提供するデータを解析します.外部アプリケーションがContentProviderのデータの追加、削除、変更、クエリー操作を行う必要がある場合は、ContentResolverクラスを使用して完了できます.ContentResolverオブジェクトを取得するには、Contextが提供するgetContentResolver()メソッドを使用します.
インプリメンテーションの挿入
public void testInsert()
{
Uri uri=Uri.parse("content://com.zj.sqlitedemo.providers.PersonContentProvider/person/insert");
ContentResolver resolver= getContext().getContentResolver();
ContentValues values=new ContentValues();
values.put("name", " ");
values.put("age", 25);
uri=resolver.insert(uri,values);
Log.i(tag, "uri"+uri);
long id=ContentUris.parseId(uri);
Log.i(tag, " "+id);
}
インプリメンテーションの削除
public void testDelete()
{
Uri uri=Uri.parse("content://com.zj.sqlitedemo.providers.PersonContentProvider/person/delete");
ContentResolver resolver= getContext().getContentResolver();
String where="_id=?";
String []selectionArgs={"21"};
int count=resolver.delete(uri, where, selectionArgs);
Log.i(tag, " :"+count);
}
実装の更新
public void testUpdate()
{
Uri uri=Uri.parse("content://com.zj.sqlitedemo.providers.PersonContentProvider/person/delete");
ContentResolver resolver= getContext().getContentResolver();
ContentValues values=new ContentValues();
values.put("name", "zj");
int count=resolver.update(uri, values, "_id=?", new String[]{"20"});
Log.i(tag, " "+count);
}
クエリの実装
public void testQueryAll()
{
Uri uri=Uri.parse("content://com.zj.sqlitedemo.providers.PersonContentProvider/person/queryAll");
ContentResolver resolver= getContext().getContentResolver();
Cursor cursor=resolver.query(uri, new String[]{"_id","name","age"}, null, null, null);
if(cursor!=null&&cursor.getCount()>0)
{
int id;
String name;
int age;
while(cursor.moveToNext())
{
id=cursor.getInt(0);
name=cursor.getString(1);
age=cursor.getInt(2);
Log.i(tag, "id:"+id+"name:"+name+"age:"+age);
}
cursor.close();
}
}
コンテンツプロバイダとsharedpreferencesの完了