一年没有搞 android 了,今天在重新复习一下基本知识,写了点代码,,,,待续
ContentProvider
android 写了点,终于测试通过了,下面就把思路说一些,以方自己再次忘记
1 创建类 实现 contentprovider
public class StudentProvider extends ContentProvider { private DBHelper dbHelper; private Context context; Cursor cursor; private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH); private static final int STUDENTS=1; private static final int STUDENT=2; static { MATCHER.addURI("com.tools.PersonProvider", "student",STUDENTS); MATCHER.addURI("com.tools.PersonProvider", "student/#",STUDENT); } @Override public boolean onCreate() { dbHelper=new DBHelper(getContext()); return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); switch (MATCHER.match(uri)){ case 1: // return sqLiteDatabase.query("student",projection,selection,selectionArgs,null,null,sortOrder); //return sqLiteDatabase.rawQuery("select * from student", null); return sqLiteDatabase.query("student", projection, selection, selectionArgs, null, null, sortOrder); case 2: long rowid = ContentUris.parseId(uri);// 返回要操作的id String where = "id=" + rowid; if (selection != null && !"".equals(selection.trim())) { where += "and" + selection; } return sqLiteDatabase.query("student", projection, where, selectionArgs, null, null, sortOrder); default: throw new IllegalArgumentException("cdcdcd error"); } } @Override public Uri insert(Uri uri, ContentValues values) { return null; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return 0; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { return 0; } @Override public String getType(Uri uri) { return null; } }
2 创建数据库帮助类 实现 sqliteOpenHelper
public class DBHelper extends SQLiteOpenHelper{ private static final String DATABASE = "test"; private static final int VERSION =1; public DBHelper(Context context) { super(context, DATABASE, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { String sql = "Create table student(" + " id INTEGER PRIMARY KEY AUTOINCREMENT," + " name varchar, age Integer)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
3 注册 contentprovider
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.demo.db" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <provider android:authorities="com.tools.StudentProvider" android:name="com.tools.StudentProvider" android:exported="true" /> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
4 测试
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Thread thread =new Thread(new Runnable() { @Override public void run() { Uri uri = Uri.parse("content://com.tools.StudentProvider/student");// 根据标识名得到内容提供者 //ContentResolver cr = MainActivity.this.getContentResolver(); ContentResolver cr =MainActivity.this.getContentResolver(); Cursor cursor = cr.query(uri, null, null, null, null); while (cursor.moveToNext()){ Log.v("rs", cursor.getString(cursor.getColumnIndex("name")) + "id:" + cursor.getInt(cursor.getColumnIndex("id"))); } } }); thread.start(); Log.v("end","end"); } }