本文主要是记录一些零碎的知识点
有人跟我说上一篇搞的太复杂了,我就删,最后只剩log输出,看一下最后的显现效果
注意看日志,信息都在日志里了,布局就四个增删改查的按钮
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".ContentResolverActivity" android:orientation="vertical"> <TextView android:text="ContentProvider与ContentResolve" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textSize="20dp" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false" android:text="add" android:onClick="add" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false" android:text="delete" android:onClick="delete" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false" android:text="update" android:onClick="update" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false" android:text="select" android:onClick="select" /> </LinearLayout>有了大概的布局后,下面跟着我一步一步的实现
先新建一个类,继承SQLiteOpenHelper,把数据库的创建与更新管理起来
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * Created by Administrator on 2016/3/21. */ public class SlackDbHelper extends SQLiteOpenHelper { public SlackDbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); Log.i("slack", "SlackDbHelper constructor.............."); } @Override public void onCreate(SQLiteDatabase db) { Log.i("slack", "SlackDbHelper onCreate SQLiteDatabase.............."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i("slack", "SlackDbHelper onUpgrade.............."); } }
接着新建一个类,继承ContentProvider,把这个数据库封装起来,提供该数据库的信息,该类里封装了上面的SlackDbHelper
import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.support.annotation.Nullable; import android.util.Log; /** * Created by Administrator on 2016/3/21. */ public class SlackContentProvider extends ContentProvider { private SlackDbHelper slackDbHelper; private SQLiteDatabase sqLiteDatabase; @Override public boolean onCreate() { Log.i("slack","SlackContentProvider onCreate.............."); slackDbHelper = new SlackDbHelper(getContext(),"user",null,1); sqLiteDatabase = slackDbHelper.getWritableDatabase(); Log.i("slack","SlackContentProvider getWritableDatabase.............."); return true; } @Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Log.i("slack","SlackContentProvider query.............."); return null; } @Nullable @Override public String getType(Uri uri) { Log.i("slack","SlackContentProvider getType.............."); return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues values) { Log.i("slack","SlackContentProvider insert.............."); return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { Log.i("slack","SlackContentProvider delete.............."); return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { Log.i("slack","SlackContentProvider update.............."); return 0; } }
在AndroidManifes t.xml文件里注册该privider,注册的位置在Application 里面,Activity的外面,居然有人不知道说的,还需要添加写外存的权限,因为数据库是真的建好了
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.addre.com.content" > <!--write storage--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".ContentResolverActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--SlackContentProvider--> <provider android:authorities="com.slack" android:name=".SlackContentProvider" android:exported="true"></provider> </application> </manifest>以上就把提供者全部建立好了,接着就是使用者通过uri( AndroidManifes t.xml文件里注册的authorities)地址访问提供者的数据。
import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; public class ContentResolverActivity extends AppCompatActivity { private Uri uri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_content_resolver); //Restful style uri=Uri.parse("content://com.slack"); Log.i("slack", "ContentResolverActivity onCreate done.............."); } public void add(View view) { Log.i("slack", "ContentResolverActivity add .............."); //public final Uri insert (Uri url, ContentValues values) getContentResolver().insert(uri,null); Log.i("slack", "ContentResolverActivity add done.............."); } public void delete(View view) { Log.i("slack", "ContentResolverActivity delete.............."); //public final int delete (Uri url, String where, String[] selectionArgs) getContentResolver().delete(uri,null,null); Log.i("slack", "ContentResolverActivity delete done.............."); } public void update(View view) { Log.i("slack", "ContentResolverActivity update.............."); //public final int update (Uri uri, ContentValues values, String where, String[] selectionArgs) getContentResolver().update(uri,null,null,null); Log.i("slack", "ContentResolverActivity update done.............."); } public void select(View view) { Log.i("slack", "ContentResolverActivity select.............."); //public final Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) getContentResolver().query(uri,null,null,null,null); Log.i("slack", "ContentResolverActivity select done.............."); } }
附件:源码下载地址:http://download.csdn.net/detail/i_do_can/9467642