爱玺玺

爱玺玺的生活日记本。wx:lb87626

理解内容提供者conentProvider的uri

Uri uri = Uri.parse("content://com.example.AccountProvider/query");

parse就有解析的意思

content://相当于http://

com.example.AccountProvider 相当于域名

/query 相当于域名下的具体应用路径


package com.example.readotherdatabase;


import android.support.v7.app.ActionBarActivity;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;



public class MainActivity extends ActionBarActivity {


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        //通过上下文获取内容解析者获得其他进程的数据库

        Uri uri = Uri.parse("content://com.example.AccountProvider/query");

        Cursor cursor = getContentResolver().query(uri, null, null, null, null);

        System.out.println("获取contentprovidertest的数据库");

        if(cursor!=null&&cursor.getCount()>0){

        while (cursor.moveToNext()) {

String name=cursor.getString(1);

String pass=cursor.getString(2);

System.out.println(name+"~~~~~~"+pass);

}

        }

    }

}



package com.example.contextprovidertest;


import android.content.ContentProvider;

import android.content.ContentValues;

import android.content.UriMatcher;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.net.Uri;


public class AccountProvider extends ContentProvider {

private MyOpenHelper dbHelper;

    //定义一个uriMatcher路径匹配器

//uri就是自己给路径取的别名,可以自己任意命名

//路径匹配器顾名思义,就是根据路径调用不同的方法

private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);

private static final int QUERYSUCCESS = 0;

//定义静态代码块创建匹配规则,静态代码块创建类时就运行,而且只运行一次

static{

//第一个参数auhtority:com.example.AccountProvider必须和清单文件配置的一样,相当于域名

//第二个参数也自己任意写个字符串,调用者也许是用这个判断,具体调用那个方法,相当于一个页面不是很恰当意思差不多

               // QUERYSUCCESS如果调用者的uri匹配成功就返回定义的这个常量,说明匹配成功

sURIMatcher.addURI("com.example.AccountProvider", "query", QUERYSUCCESS);

}

//oncreate方法会首先被自动执行,加载时就要执行

@Override

public boolean onCreate() {

//getContext() contentProvier里面获取上下文

dbHelper=new MyOpenHelper(getContext()); 

return false;

}


@Override

public Cursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sortOrder) {

System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~内容提供者query方法~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

//query方法是给其它程序调用的,这里面调用者传的参数uri里面也有个code码,然后匹配出来,看这是哪个匹配码,根据匹配码判断执行

int code = sURIMatcher.match(uri);

if(code==QUERYSUCCESS){

System.out.println("路径匹配成功");

//匹配成功就执行query对数据库进行查询操作

//拿到数据库对象

SQLiteDatabase db = dbHelper.getReadableDatabase();

//操作数据库

//projection查询的列

Cursor cursor = db.query("info", projection, selection, selectionArgs, null, null, sortOrder);

return cursor;

}else{

   throw new IllegalArgumentException("参数不匹配");

}

}


@Override

public String getType(Uri uri) {

// TODO Auto-generated method stub

return null;

}


@Override

public Uri insert(Uri uri, ContentValues values) {

// TODO Auto-generated method stub

return null;

}


@Override

public int delete(Uri uri, String selection, String[] selectionArgs) {

// TODO Auto-generated method stub

return 0;

}


@Override

public int update(Uri uri, ContentValues values, String selection,

String[] selectionArgs) {

// TODO Auto-generated method stub

return 0;

}


}



<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.contextprovidertest"

    android:versionCode="1"

    android:versionName="1.0" >


    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="21" />


    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <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>

        <provider 

            android:name="com.example.contextprovidertest.AccountProvider"

            android:authorities="com.example.AccountProvider">

            

        </provider>

    </application>


</manifest>


发表评论:

Powered By Z-BlogPHP 1.4 Deeplue Build 150101

Copyright Your WebSite.Some Rights Reserved.

蜀ICP备11021721号-5