移动开发技术作业 作业三

设计目标:

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

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

3、本次作业请启用新项目,理论上需要两个APP进行实验。

 功能说明:
复制代码
package com.example.resolve;

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();

        ContentValues values=new ContentValues();
        values.put("name","cc");
        values.put("age",20);
        Uri uri=Uri.parse("content://wcc.provider1/person");
        Integer.parseInt("20");
        Button button1=findViewById(R.id.button);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                resolver.insert(uri,values);
            }
        });
    }
}
复制代码

这个代码的目的是通过数据库的资源地址将数据插入数据库。为了做到这一点,还需要关联权限。加上了权限,这个接收APP也算是做好了。

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

复制代码

package
com.example.contentprovider; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; 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 sqLiteDatabase) { sqLiteDatabase.execSQL("create table student(id integer primary key autoincrement " + ",name varchar(20) ," + "age integer)"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }
复制代码

这段代码的目的是创建一个数据库

复制代码
public class MyContentProvider extends ContentProvider {
    public 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) {
        // TODO: Implement this to handle requests to insert a new row.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public boolean onCreate() {
        // TODO: Implement this to initialize your content provider on startup.
        Context context=getContext();
        myDAO=new MyDAO(context);
        return true;
    }

    @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");
    }
}
复制代码

通过contentprovisder实现数据库操作的创建。

复制代码
public class MyDAO {
    private SQLiteDatabase database;
    private SQLiteOpenHelper myopenhelper;
    private Context context;

    private Uri uri=Uri.parse("content://wcc.provider1");  //.../person/10  指的是person表第10行

    public MyDAO(Context context){
        this.context=context;
        myopenhelper=new MyDBhelper(context,"wccDB",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)");
    }

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

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

这段代码主要实现了对数据库的操作。

 运行展示截图:

 

 仓库地址:https://github.com/mostimacc/contentprovider.git

https://github.com/mostimacc/resolve.git

 

 

 

 

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