移动开发技术作业 作业三
设计目标:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理