搜索

移动开发技术:使用provider


发布时间: 2022-11-24 22:15:00    浏览次数:36 次

实验要求:

  • 1、contentprovider是安卓四大组件之一,请使用其方法类进行数据获取;
  • 2、请自建一个provider,然后在另一个app中使用resolver调用这个provider。

实验设计:
首先我们来看看provider app,这个app首先负责创建一个sqlite数据库,然后创建好一个DAO来访问数据库,操作数据库中的数据,再用一个content provider来调用DAO中的接口来添加数据。

Provider核心代码:

DBHelper负责创建数据库。

public class MyDBHelper extends SQLiteOpenHelper {
    public MyDBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        Log.d("doby", "DBHelper: 创建数据库");
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    }
}

DAO中利用DBHelper来创建数据库,然后建person表。提供insert方法来提供插入数据的服务。

public class MyDAO {
    private SQLiteDatabase database;
    private SQLiteOpenHelper myopenhelper;
    private Context context;

    private Uri uri=Uri.parse("content://doby.provider");

    public MyDAO(Context context){
        this.context=context;
        myopenhelper=new MyDBHelper(context,"dobyDB",null,1);
        database=myopenhelper.getReadableDatabase();

        database.execSQL("drop table if exists person");
        database.execSQL("create table person(id integer primary key autoincrement,"+" name varchar, age integer)");
        Log.d("doby", "已成功创建数据库。");
    }

    public Uri insert(Uri uri, ContentValues values){
        long rowID=database.insert("person",null,values);

        if(rowID == -1){
            Log.d("doby","DAO: 数据插入失败");
            return  null;
        }
        else {
            Uri insertUri= ContentUris.withAppendedId(uri,rowID);
            Log.d("doby","ContentUris:"+insertUri.toString());
            context.getContentResolver().notifyChange(insertUri,null);
            return insertUri;
        }
    }
}

然后我们来创建content provider,主要修改了以下代码,

@Override
public boolean onCreate() {
    Context context = getContext();
    myDAO = new MyDAO(context);
    return true;
}
public Uri insert(Uri uri, ContentValues values) {
    return myDAO.insert(uri, values);
}

其中onCreate创建好DAO对象,然后在insert中通过DAO对象调用insert方法,来插入数据。

Resolver核心代码:

resolver的代码就比较简单了,直接用provider对应的uri来调用insert插入数据。resolver中是有一个按钮来运行函数的,这个按钮不重要,看看函数逻辑。

public class MainActivity extends AppCompatActivity {
    private Button btn_resolver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        btn_resolver = findViewById(R.id.btn_resolver);
        ContentResolver resolver = getContentResolver();
        Uri uri = Uri.parse("content://doby.provider/person");

        ContentValues values = new ContentValues();
        values.put("name","何家健");
        values.put("age",20);

        btn_resolver.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                resolver.insert(uri,values);
                Log.d("doby", "Resolver: 已成功插入数据。");
            }
        });
    }
}

OK上面就是在resolver中插入数据的方法。

实验结果

image

实验仓库:https://github.com/DobyAsa/Android_Provider

免责声明 移动开发技术:使用provider,资源类别:文本, 浏览次数:36 次, 文件大小:-- , 由本站蜘蛛搜索收录2022-11-24 10:15:00。此页面由程序自动采集,只作交流和学习使用,本站不储存任何资源文件,如有侵权内容请联系我们举报删除, 感谢您对本站的支持。 原文链接:https://www.cnblogs.com/dobyasa/p/16923624.html