鱼C论坛

 找回密码
 立即注册
查看: 1864|回复: 0

[学习笔记] android 7.4.2

[复制链接]
发表于 2017-10-26 12:03:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
打开以前写的数据库项目,(不是litepal),把MydatabaseHelper.java文件里的那行Toast去掉, 用鼠标右键点击包名new->other->content provider的方法在maniactivity.java旁边新建个类名为DatabaseProvider,授权为com.example.databasetest.provider的文件,把底下2个选项也勾上,修改内容为
  1. package com.example.xinwei.databasetest;

  2. import android.content.ContentProvider;
  3. import android.content.ContentValues;
  4. import android.content.UriMatcher;
  5. import android.database.Cursor;
  6. import android.database.sqlite.SQLiteDatabase;
  7. import android.net.Uri;

  8. public class DatabaseProvider extends ContentProvider {
  9.     public static final int BOOK_DIR = 0;
  10.     public static final int BOOK_ITEM = 1;
  11.     public static final int CATEGORY_DIR = 2;
  12.     public static final int CATEGORY_ITEM = 3;
  13.     public static final String AUTHORITY = "com.example.databasetest.provider";
  14.     private static UriMatcher uriMatcher;
  15.     private MyDatabaseHelper dbHelper;
  16.     static {
  17.         uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
  18.         uriMatcher.addURI(AUTHORITY,"book",BOOK_DIR);
  19.         uriMatcher.addURI(AUTHORITY,"book/#",BOOK_ITEM);
  20.         uriMatcher.addURI(AUTHORITY,"category",CATEGORY_DIR);
  21.         uriMatcher.addURI(AUTHORITY,"category/#",CATEGORY_ITEM);
  22.     }
  23.     public DatabaseProvider() {
  24.     }

  25.     @Override
  26.     public int delete(Uri uri, String selection, String[] selectionArgs) {
  27.         // Implement this to handle requests to delete one or more rows.
  28.         SQLiteDatabase db=dbHelper.getWritableDatabase();
  29.         int deleteRows=0;
  30.         switch (uriMatcher.match(uri)){
  31.             case BOOK_DIR:
  32.                 deleteRows=db.delete("book",selection,selectionArgs);
  33.                 break;
  34.             case BOOK_ITEM:
  35.                 String bookId=uri.getPathSegments().get(1);
  36.                 deleteRows=db.delete("book","id=?",new String[]{bookId});
  37.                 break;
  38.             case CATEGORY_DIR:
  39.                 deleteRows=db.delete("Category",selection,selectionArgs);
  40.                 break;
  41.             case CATEGORY_ITEM:
  42.                 String categoryId=uri.getPathSegments().get(1);
  43.                 deleteRows=db.delete("Category","id=?",new String[]{categoryId});
  44.                 break;
  45.             default:
  46.                 break;
  47.         }
  48.         return deleteRows;
  49.     }

  50.     @Override
  51.     public String getType(Uri uri) {
  52.         // TODO: Implement this to handle requests for the MIME type of the data
  53.         // at the given URI.
  54.         switch (uriMatcher.match(uri)){
  55.             case BOOK_DIR:
  56.                 return "vnd.android.cursor.dir/vnd.com.example.databasetest.provider.book";
  57.             case BOOK_ITEM:
  58.                 return "vnd.android.cursor.item/vnd.com.example.databasetest.provider.book";
  59.             case CATEGORY_DIR:
  60.                 return "vnd.android.cursor.dir/vnd.com.example.databasetest.provider.category";
  61.             case CATEGORY_ITEM:
  62.                 return "vnd.android.cursor.item/vnd.com.example.databasetest.provider.category";
  63.         }
  64.         return null;
  65.     }

  66.     @Override
  67.     public Uri insert(Uri uri, ContentValues values) {
  68.         // TODO: Implement this to handle requests to insert a new row.
  69.         SQLiteDatabase db=dbHelper.getWritableDatabase();
  70.         Uri uriReturn=null;
  71.         switch (uriMatcher.match(uri)){
  72.             case BOOK_DIR:

  73.             case BOOK_ITEM:
  74.                 long newBookId=db.insert("book",null,values);
  75.                 uriReturn=Uri.parse("content://"+AUTHORITY+"/book/"+newBookId);
  76.                 break;
  77.             case CATEGORY_DIR:

  78.             case CATEGORY_ITEM:
  79.                 break;
  80.             default:
  81.                 break;
  82.         }
  83.         return uriReturn;
  84.     }

  85.     @Override
  86.     public boolean onCreate() {
  87.         // TODO: Implement this to initialize your content provider on startup.
  88.         dbHelper = new MyDatabaseHelper(getContext(),"BookStore.db",null,2);
  89.         return true;
  90.     }

  91.     @Override
  92.     public Cursor query(Uri uri, String[] projection, String selection,
  93.                         String[] selectionArgs, String sortOrder) {
  94.         // TODO: Implement this to handle query requests from clients.
  95.         SQLiteDatabase db= dbHelper.getReadableDatabase();
  96.         Cursor cursor=null;
  97.         switch (uriMatcher.match(uri)){
  98.             case BOOK_DIR:
  99.                 cursor=db.query("book",projection,selection,selectionArgs,null,null,sortOrder);
  100.                 break;
  101.             case BOOK_ITEM:
  102.                 String bookId=uri.getPathSegments().get(1);
  103.                 cursor=db.query("book",projection,"id=?",new String[]{bookId},null,null,sortOrder);
  104.                 break;
  105.             case CATEGORY_DIR:
  106.                 cursor=db.query("Category",projection,selection,selectionArgs,null,null,sortOrder);
  107.                 break;
  108.             case CATEGORY_ITEM:
  109.                 String categoryId=uri.getPathSegments().get(1);
  110.                 cursor=db.query("Category",projection,"id=?",new String[]{categoryId},null,null,sortOrder);
  111.                 break;
  112.             default:
  113.                 break;
  114.         }
  115.         return cursor;
  116.     }

  117.     @Override
  118.     public int update(Uri uri, ContentValues values, String selection,
  119.                       String[] selectionArgs) {
  120.         // TODO: Implement this to handle requests to update one or more rows.
  121.         SQLiteDatabase db=dbHelper.getWritableDatabase();
  122.         int updateRows=0;
  123.         switch (uriMatcher.match(uri)){
  124.             case BOOK_DIR:
  125.                 updateRows=db.update("book",values,selection,selectionArgs);
  126.                 break;
  127.             case BOOK_ITEM:
  128.                 String bookId=uri.getPathSegments().get(1);
  129.                 updateRows=db.update("book",values,"id=?",new String[]{bookId});
  130.                 break;
  131.             case CATEGORY_DIR:
  132.                 updateRows=db.update("Category",values,selection,selectionArgs);
  133.                 break;
  134.             case CATEGORY_ITEM:
  135.                 String categoryId=uri.getPathSegments().get(1);
  136.                 updateRows=db.update("Category",values,"id=?",new String[]{categoryId});
  137.                 break;
  138.             default:
  139.                 break;
  140.         }
  141.         return updateRows;
  142.     }
  143. }
复制代码

然后建个providerTest新项目,用来读取上个项目数据库的内容,在这之前先把原来手机上的数据库项目删掉,从新运行一下我们刚才修改的数据库项目然后关闭。在新项目里修改布局文件activity_main.xml文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:orientation="vertical">
  6.     <Button
  7.     android:id="@+id/add_data"
  8.     android:layout_width="match_parent"
  9.     android:layout_height="wrap_content"
  10.     android:text="add to book"/>

  11.     <Button
  12.         android:id="@+id/query_data"
  13.         android:layout_width="match_parent"
  14.         android:layout_height="wrap_content"
  15.         android:text="query from book"/>
  16.     <Button
  17.         android:id="@+id/update_data"
  18.         android:layout_width="match_parent"
  19.         android:layout_height="wrap_content"
  20.         android:text="update book"/>
  21.     <Button
  22.         android:id="@+id/delete__data"
  23.         android:layout_width="match_parent"
  24.         android:layout_height="wrap_content"
  25.         android:text="delete from book"/>
  26. </LinearLayout>
复制代码

修改mainactivity.java
  1. package com.example.xinwei.providertest;

  2. import android.content.ContentValues;
  3. import android.database.Cursor;
  4. import android.net.Uri;
  5. import android.support.v7.app.AlertDialog;
  6. import android.support.v7.app.AppCompatActivity;
  7. import android.os.Bundle;
  8. import android.util.Log;
  9. import android.view.View;
  10. import android.widget.Button;

  11. public class MainActivity extends AppCompatActivity {
  12.     private String newId;
  13.     @Override
  14.     protected void onCreate(Bundle savedInstanceState) {
  15.         super.onCreate(savedInstanceState);
  16.         setContentView(R.layout.activity_main);
  17.         Button addData=(Button)findViewById(R.id.add_data);
  18.         addData.setOnClickListener(new View.OnClickListener() {
  19.             @Override
  20.             public void onClick(View view) {
  21.                 Uri uri=Uri.parse("content://com.example.databasetest.provider/book");
  22.                 ContentValues contentValues=new ContentValues();
  23.                 contentValues.put("name","A Clash of Kings");
  24.                 contentValues.put("author","George Martin");
  25.                 contentValues.put("pages",1040);
  26.                 contentValues.put("price",22.85);
  27.                 Uri newUri=getContentResolver().insert(uri,contentValues);
  28.                 newId=newUri.getPathSegments().get(1);
  29.             }
  30.         });
  31.         Button queryData=(Button)findViewById(R.id.query_data);
  32.         queryData.setOnClickListener(new View.OnClickListener() {
  33.             @Override
  34.             public void onClick(View view) {
  35.                 Uri uri=Uri.parse("content://com.example.databasetest.provider/book");
  36.                 Cursor cursor=getContentResolver().query(uri,null,null,null,null);
  37.                 if (cursor!=null){
  38.                     while (cursor.moveToNext()){
  39.                         String name=cursor.getString(cursor.getColumnIndex("name"));
  40.                         String author=cursor.getString(cursor.getColumnIndex("author"));
  41.                         int pages=cursor.getInt(cursor.getColumnIndex("pages"));
  42.                         double price=cursor.getDouble(cursor.getColumnIndex("price"));
  43.                         Log.d("MainActivity","book name is"+name);
  44.                         Log.d("MainActivity","book author is"+author);
  45.                         Log.d("MainActivity","book pages is"+pages);
  46.                         Log.d("MainActivity","book price is"+price);
  47.                     }
  48.                     cursor.close();
  49.                 }
  50.             }
  51.         });
  52.         Button updateData=(Button)findViewById(R.id.update_data);
  53.         updateData.setOnClickListener(new View.OnClickListener() {
  54.             @Override
  55.             public void onClick(View view) {
  56.                 Uri uri=Uri.parse("content://com.example.databasetest.provider/book"+newId);
  57.                 ContentValues contentValues=new ContentValues();
  58.                 contentValues.put("name","A Storm of Swords");
  59.                 contentValues.put("price",24.05);
  60.                 contentValues.put("pages",1216);
  61.                 getContentResolver().update(uri,contentValues,null,null);
  62.             }
  63.         });
  64.         Button deleteData=(Button)findViewById(R.id.delete__data);
  65.         deleteData.setOnClickListener(new View.OnClickListener() {
  66.             @Override
  67.             public void onClick(View view) {
  68.                 Uri uri=Uri.parse("content://com.example.databasetest.provider/book"+newId);
  69.                 getContentResolver().delete(uri,null,null);
  70.             }
  71.         });
  72.     }
  73. }
复制代码

再运行这个新项目就可以对原来的数据库进行增删改查了

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 10:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表