Android 第三次作业 contentprovider与resolver

2022-11-24 20:16:27 浏览数 (1)

作业要求:

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

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

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

首先我们新建两个新的项目,分别命名为ContentProvider和Myresolver。

我们先完成Myresolver的编写:在MainActivity.java里面写:

package com.example.myresolver;

import androidx.annotation.ContentView;

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 {

private Button button;

private ContentResolver resolver;

//private static final String AUTHORITY="hjy.Provider1";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

button=findViewById(R.id.button);

ContentResolver resolver=getContentResolver();

Uri uri=Uri.parse("content://hjy.provider1/student");

ContentValues values=new ContentValues();

values.put("name","hjy");

values.put("age",19);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

resolver.insert(uri,values);

}

});

}

}

设计的resolver界面如下:

然后我们开始编写ContentProvider:

 先编写数据库有关代码,新建一个DatabaseActivity和一个MyDBhelper,代码如下:

package com.example.contentprovider;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;

import android.content.ContentValues;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

public class DatabaseActivity2 extends AppCompatActivity {

private Button button,button2,button3,button4;

private MyDBhelper dBhelper;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_database2);

button=findViewById(R.id.button);

button2=findViewById(R.id.button2);

button3=findViewById(R.id.button3);

button4=findViewById(R.id.button4);

MyDBhelper dBhelper=new MyDBhelper(this,"hjyDB",null,1);

SQLiteDatabase database=dBhelper.getReadableDatabase();

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

ContentValues values1=new ContentValues();

values1.put("name","zhangsan");

values1.put("age",19);

ContentValues values2=new ContentValues();

values2.put("name","lisi");

values2.put("age",20);

ContentValues values3=new ContentValues();

values3.put("name","wangwu");

values3.put("age",21);

ContentValues values4=new ContentValues();

values4.put("name","liuliu");

values4.put("age",21);

database.insert("student",null,values1);

database.insert("student",null,values2);

database.insert("student",null,values3);

database.insert("student",null,values4);

ContentValues values=new ContentValues();

}

});

button2.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

ContentValues values=new ContentValues();

values.put("age",19);

database.update("student",values,"name=?",new String[]{"liuliu"});//修改liuliu的年龄为19

}

});

button3.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

// database.execSQL("delete from student");//删除表的所有内容

database.delete("student","name=?",new String[]{"liuliu"});//删除名字为liuliu的一行

}

});

button4.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

Cursor cursor1=database.query("student",new String[]{"name"},"name=?",new String[]{"wangwu"},

null,null,null);

Cursor cursor2=database.rawQuery("select * from student where name=?",new String[]{"zhangsan"});//另一种查询方法

Log.d("hjy",String.valueOf(cursor2.getCount()));

Log.d("hjy","cursor2.getPosition:" cursor2.getPosition());

while (cursor2.moveToNext()){

@SuppressLint("Range") Integer id=cursor2.getInt(cursor2.getColumnIndex("id"));

@SuppressLint("Range") String name=cursor2.getString(cursor2.getColumnIndex("name"));

Log.d("hjy","result" id name);

}

cursor2.close();

}

});

}

}

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,"hjyDB",factory,version);}

@Override

public void onCreate(SQLiteDatabase sqLiteDatabase){

sqLiteDatabase.execSQL("create table student(" "id integer primary key autoincrement,name varchar(20),age interger)");

}

@Override

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

}

DatabaseActivity的界面如下:

然后我们编写ContentProvider.java:

package com.example.contentprovider;

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;

private Context context;

@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");

return myDAO.hjyInsert(values);

}

@Override

public boolean onCreate() {

// TODO: Implement this to initialize your content provider on startup.

context=this.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");

}

}

MyDao.java:

package com.example.contentprovider;

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 Uri uri=Uri.parse("content://hjy.provider1");

public MyDAO(Context context){

this.context=context;

}

// MyDBhelper dBhelper=new MyDBhelper(context,"hjyDB",null,1);

// SQLiteDatabase database=dBhelper.getWritableDatabase();

public Uri hjyInsert(ContentValues values){

MyDBhelper dBhelper=new MyDBhelper(context,"hjyDB",null,1);

SQLiteDatabase database=dBhelper.getWritableDatabase();

ContentValues values1=new ContentValues();

values1.put("name","zhangsan");

values1.put("age",19);

Uri uri=Uri.parse("content://hjy.provider1/student");

long rowId= database.insert("student",null,values1);

Uri inserturi= ContentUris.withAppendedId(uri,rowId);

return inserturi;

}

}

当然我们还要修改Mainfest里的内容,首先要增加permission

修改provider里的内容

以上就是代码编写的内容,然后我们运行contentprovider和resolver

运行结果:

点击INSETR按钮

源代码地址张浪浪的仓库: ......dfafa (gitee.com)

0 人点赞