contentprovider-作业3

设计目标

contentprovider是安卓四大组件之一,使用其方法类进行数据获取

功能说明

自建一个provider,然后在另一个app中使用resolver调用这个provider。

代码

provider

MyDAO

package com.example.provider;

import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;

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

    public MyDAO(Context context) {
        this.context = context;
        MyDBhelper dBhelper = new MyDBhelper(context, "ztDB", null, 1);
        database = dBhelper.getWritableDatabase();
    }

    public Uri DAOinsert(ContentValues contentValues) {
        long rowid=database.insert("student", null, contentValues);
//        Uri uri=Uri.parse("content://zt.provider2/student/10");//取第10行
        Uri uri=Uri.parse("content://zt.provider2");
        Uri inserturi=ContentUris.withAppendedId(uri,rowid);
        context.getContentResolver().notifyChange(inserturi,null);
        return inserturi;
    }

}

MyDBhelper

package com.example.provider;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import androidx.annotation.Nullable;

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 sqLiteDatebase) {
//        SQLiteDatabase sqLiteDatebase = null;
        sqLiteDatebase.execSQL("create table student(" +
                "id integer primary key autoincrement,name varchar(20),age integer)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

MainActivity

package com.example.provider;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        MyDAO myDAO=new MyDAO(this);
    }
}

MyContentProvider

package com.example.provider;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;

public class MyContentProvider extends ContentProvider {
    private MyDAO myDAO;

    public MyContentProvider() {


    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        // Implement this to handle requests to delete one or more rows.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @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) {

        return myDAO.DAOinsert(values);
        // TODO: Implement this to handle requests to insert a new row.
//        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public boolean onCreate() {

        Context context=getContext();
        myDAO=new MyDAO(context);
        // TODO: Implement this to initialize your content provider on startup.
        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");
    }
}

manifest

添加

        <provider
            android:name=".MyContentProvider"
            android:authorities="zt.provider2"
            android:enabled="true"
            android:exported="true"></provider>

resolver

resolver调用provider

MainActivity

package com.example.resolver;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ContentResolver resolver=getContentResolver();
        Button button=findViewById(R.id.button);

        ContentValues values=new ContentValues();
        values.put("name","zt");
        values.put("age",20);

        Uri uri=Uri.parse("content://zt.provider2/student");

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                resolver.insert(uri,values);

            }
        });
    }
}

manifest

添加

    <queries>
        <package android:name="com.example.provider"></package>
    </queries>

结果

resolver调用provider, 并通过按钮向provider的数据库传值

代码仓库

zt20xx/zuoye3 (github.com)

posted @   zt20xx  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示