zoukankan      html  css  js  c++  java
  • 自定义ContentProvider

    首先我们要明白内容提供者为什么提供内容的,android中需要把内容共享出来,但是数据库又不可以对外公开,这时候我们就需要内容提供者出面了,他的作用就是把封闭的数据库通过他可以访问到里面的数据,从而让外界访问。在android系统里有很多很多的内容提供者。我们怎么能找到他呢?通过主机名就可以了,这就好像一个班里有很多学生,你知道你要找的这个人的名字就能找到他了。

    怎么来自定义内容提供者呢?其实说白了他就是一个java类,然后继承了ContentProvider,这样系统就承认他是一个内容提供者了。

    还要在配置文件里进行内容提供者的配置

    <provider
    android:name="com.neusoft.demo.MyContentProvider"
    android:authorities="com.hello.demo"    这个就是主机名称
    android:exported="true" >                必须加的
    </provider>

    这是内容提供者里插入的方法,我们就当他当例子来说明。

    这个方法注意了,不是应用程序本身访问的,而是让外界来访问的。

    外界传进来数据,然后在传递uri就能找到这个方法了,然后对他进行操作

    @Override
    public Uri insert(Uri uri, ContentValues values) {
    db.insert("people", null, values);

    return uri;
    }

    这时候再其他的应用程序里通过内容解析器就可以进行访问了

    findViewById(R.id.insert_btn).setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
    ContentResolver cr = getContentResolver();//解析器
    ContentValues values = new ContentValues();//要传入的参数
    values.put("name","急急急");
    values.put("sex", "男");
    cr.insert(Uri.parse("content://com.hello.demo"), values);

    }
    });

    package com.neusoft.demo;
    
    import android.content.ContentProvider;
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.net.Uri;
    
    public class MyContentProvider extends ContentProvider {
        SQLiteOpenHelper oh;
        SQLiteDatabase db;
        
    
        @Override
        public int delete(Uri uri, String selection, String[] selectionArgs) {
            return db.delete("people", selection, selectionArgs);
        }
    
        @Override
        public String getType(Uri uri) {
            // TODO: Implement this to handle requests for the MIME type of the data
            // at the given URI.
            throw new UnsupportedOperationException("Not yet implemented");
        }
    
        @Override
        public Uri insert(Uri uri, ContentValues values) {
            db.insert("people", null, values);
            
            return uri;
        }
    
        @Override
        public boolean onCreate() {
            oh = new MyOpenHelp(getContext());
            db = oh.getWritableDatabase();
            return false;
        }
    
        @Override
        public Cursor query(Uri uri, String[] projection, String selection,
                String[] selectionArgs, String sortOrder) {
            // TODO: Implement this to handle query requests from clients.
            throw new UnsupportedOperationException("Not yet implemented");
        }
    
        @Override
        public int update(Uri uri, ContentValues values, String selection,
                String[] selectionArgs) {
            // TODO: Implement this to handle requests to update one or more rows.
            throw new UnsupportedOperationException("Not yet implemented");
        }
    }
    package com.neusoft.demo;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class MyOpenHelp extends SQLiteOpenHelper {
    
        public MyOpenHelp(Context context) {
            super(context, "people.db", null, 1);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            String sql = "create table people(_id integer primary key,name varchar(20),sex varchar(10) )";
            db.execSQL(sql);
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
            // TODO Auto-generated method stub
    
        }
    
    }

    调用的activity

    package com.example.contentprovider2;
    
    import android.net.Uri;
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.content.ContentValues;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            findViewById(R.id.insert_btn).setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    ContentResolver cr = getContentResolver();
                    ContentValues values = new ContentValues();
                    values.put("name", "急急急");
                    values.put("sex", "男");
                    cr.insert(Uri.parse("content://com.hello.demo"), values);
                    
    
                }
            });
            findViewById(R.id.delete_btn).setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    ContentResolver cr = getContentResolver();
                    cr.delete(Uri.parse("content://com.hello.demo"), "_id=?",
                            new String[] { String.valueOf(1) });
    
                }
            });
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    }
  • 相关阅读:
    cpu时钟周期
    调参学习
    力扣:堆
    学习率衰减问题
    力扣:图之并查集问题
    Java判断空字符串
    python读取文件通过正则过滤需要信息然后保存到新文件里
    python换行写入文件
    Robotium solo.goBack();不起作用,解决方案
    Android清除本地数据缓存代码
  • 原文地址:https://www.cnblogs.com/84126858jmz/p/4921958.html
Copyright © 2011-2022 走看看