一.作业要求

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

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

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

二.作业内容

1.首先我们要创建两个项目分别是provider和resovler

2.provider的内容为

MainActivity.Java

package com.example.provider;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);MyDAO myDAO=new MyDAO(this);}
}

MyContentProvider.Java

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() {}@Overridepublic 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");}@Overridepublic 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");}@Overridepublic Uri insert(Uri uri, ContentValues values) {// TODO: Implement this to handle requests to insert a new row.//getContext().getContentResolver().insert(uri, values);return  myDAO.DAOinsert(values);}@Overridepublic boolean onCreate() {// TODO: Implement this to initialize your content provider on startup.Context context=getContext();myDAO=new MyDAO(context);return false;}@Overridepublic 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");}@Overridepublic 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");}
}

MyDao.Java

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,"cwjDB",null,1);database=dBhelper.getReadableDatabase();}public Uri DAOinsert(ContentValues contentValues){long rowid=database.insert("student",null,contentValues);Uri uri=Uri.parse("content://cwj.provider2/student");Uri inserturi=ContentUris.withAppendedId(uri,rowid);context.getContentResolver().notifyChange(inserturi,null);return inserturi;}
}

MyDBhelper.Java

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);Log.d("cwj","MyDBhelper...");}@Overridepublic void onCreate(SQLiteDatabase sqLiteDatabase) {sqLiteDatabase.execSQL("create table student(" +"id integer primary key autoincrement,name varchar,age integer)");Log.d("cwj","onCreate...");}@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {Log.d("cwj","onUpgrade...");}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

3.resovler项目内容为

MainActivity.Java

package com.example.resovler;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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ContentResolver resolver=getContentResolver();ContentValues values=new ContentValues();values.put("name","cwj");values.put("age",20);Uri uri=Uri.parse("content://cwj.provider2/student");Button button = findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {resolver.insert(uri,values);}});}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="resovler"android:textSize="45dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.526"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.363" /><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="insert"android:textSize="45dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.555"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.587" /></androidx.constraintlayout.widget.ConstraintLayout>

作业结果:

每点击一次INSERT数据库的student表中就会插入一次数据

代码仓库

resovler: resovler。。

provider: provider。。。

Android Studio 第三次作业相关推荐

  1. android studio 打包慢,[Android Studio系列(三)]Android Studio 编译、同步慢的解决方法

    1 问题 (1) 当项目中引用的第三方模块太多,打开Android Studio的时候就会非常慢,提示一直在解决模块依赖,点击sync按钮同步第三方代码的时候也是巨慢,慢的原因是: 在gradle中引 ...

  2. 基于Android Studio实现的功能强大的购物商城APP源码,可做Android Studio毕业设计、大作业

    Android 购物商城app 完整代码下载地址:基于Android Studio实现的功能强大的购物商城APP源码 实现的功能: 注册 登录 修改密码 重置密码(邮箱验证,考核结束将移除授权码) 商 ...

  3. android studio 接口方法,Android Studio第三十期 - 介绍几种网络请求方式写法

    框架git地址:附(爱一个人就要爱他(loader)的全部~) 请求方式:POST 请求示例{ "verify_info":{ "app":{ "ap ...

  4. Android studio第四次作业

    显示效果: java代码 genderGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){ public ...

  5. Android Studio 实验三:水果店

    目录 activity_main.xml Activity Fruit和Person类 Fruit Person 运行截图 项目文件 activity_main.xml <?xml versio ...

  6. Android Studio第三十四期 - git企业级应用命令

    1.git status 2.git add -A 3.git commit -m "merger" 4.git pull 5.git push origin master 6.g ...

  7. Android Studio第三十五期 - 定时器弱引用+Service的写法

    代码已经整理好,效果如下图: 图1: 图2: 地址:https://github.com/geeklx/MyApplication/tree/master/p020_timer 转载于:https:/ ...

  8. 《Android 移动应用基础教程(Android Studio)(第2版)》【课本客观题】+【学习通2023春】【参考答案】

    文章目录 超星学习通智能终端软件开发(基于Android Studio环境)章节作业(39) 一 二 三 四 五 六 课本一 课本二 课本三 课本四 课本五 课本六(无) 课本七 课本八 课本九 课本 ...

  9. 安装与下载 Android studio(以下为处理器是Intel的安装方法,下载前请检查一下自己的CPU为AMD 还是Intel的)

    第一步:在浏览器上搜索Android studio,点击进去第一步:在浏览器上搜索Android studio,点击进去 第二步:点击download Android studio 第三步:滑到最下方 ...

最新文章

  1. taro 重新加载小程序_taro-music一款开源网易云音乐小程序
  2. java中的io系统详解(转)
  3. 在Visual Studio的Server Explorer中怎样修改表名
  4. FreeRTOS任务挂起和恢复
  5. D3.js、echar.js 前端必备大数据技能
  6. v8的垃圾回收机制(二)
  7. 服务器如何修改内存大小,如何限制docker容器的内存大小
  8. 74HC138(三八译码器)74HC573(锁存器)74HC02(或非门)
  9. 数据处理之异常值处理
  10. 研发人员分层及其工作内容划分
  11. 高仿富途牛牛-组件化(二)-磁力吸附
  12. org.apache.felix.http.jetty %bundles.pluginTitle: Cannot start (org.osgi.framework.BundleException:
  13. 迅软信息签约安龙基因医药技术构建医药行业防护体
  14. C++ 类与对象_类的其他成员(常成员,静态成员,友元)
  15. 中国招聘网站2007春调研报告(from 搜索引擎项目)
  16. oracle mysql查询速度慢_oracle 根据时间范围查询缓慢问题排查解决
  17. 45个高频词的一词多义和固定搭配
  18. 汽车美容快修店如何快速拓客-云上铺汽车管理软件
  19. 字节跳动EE部门前端面试经历及总结
  20. postman使用教程(3)--获取token

热门文章

  1. 推荐一个朋友做的资源网站
  2. 手机邮箱好处,邮箱格式地址,安全邮箱号是什么样的?
  3. N2语法汇总(190条)
  4. 【资料整理】BGL中的BFS算法使用
  5. python renamer模块_python - 发布自己的模块(脚本) 到pypi.org
  6. 黑客侦察和隐藏IP地址的方法
  7. 重塑价值:新一代ITSM平台的建设、咨询与实施
  8. Linux 网络编程——浅谈 C/S 和 B/S 架构
  9. MacBook触控板也可以变得更强大——手势增强工具 Better and better
  10. 原型设计如何直接生成html,使用原型设计工具 Axure RP创建一个web页面框架