目录
1. 参考 「 持 久 化 技 术 」 的 项 目 , 创 建 一 个 对 外 的 ContentProvider 以供使用。 2. 新建一个应用程序,应用的名字自拟。 3. 应用程序中包含一个 MainActivity ,为默认登陆 Activity : ( 1 ) 其布局包含: 1 个 RecyclerView 、 1 个「查询」按钮。 ( 2 ) RecyclerView 用来展示书单,展示的内容包括:书名、作者、价格。 ( 3 ) 按钮用来查询「网上图书馆」应用中的所有图书信息,用来更新 RecyclerView 中的数据。 ( 4 ) RecyclerView 的列项可以点击;点击时,跳转到 BookActivity 。 4. BookActivity 用于展示图书的所有信息: ( 1 ) 其布局包含 1 个 RecyclerView 和 1 个「返回」按钮。 ( 2 ) RecyclerView 完整展示了图书的所有信息,即书名、作者、价格、页数、类别。 ( 3 ) 「返回」按钮则用来返回到 MainActivity 。
要想实现资源的共享,重点是实现两台机子的连接,请求方得到共享方的访问权限即可。使用ContentProvider实现该功能,具体如何实现可以仔细看我的代码。
运行截图:
一)先运行 mylibrary 这个 app 我的数据如下 二)然后再运行另一个 app 三) 点击查询刷新数据(这里我已经添加过数据了,所以可以查询到数据 四)点击具体列项可以查看所有信息 五)点击返回源码
这里要创建两个项目,一个是共享资源方,一个是请求资源方
项目一:共享资源方
Book.kt
package com.example.mylibrary
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
data class Book(
val name: String,
val author: String,
val price: Double,
val pages: Int,
val categoryId: Int
): Parcelable
LoginActivity.kt
package com.example.mylibrary
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.CheckBox
import android.widget.EditText
import android.widget.Toast
class LoginActivity : AppCompatActivity() {
private lateinit var usernameEditText: EditText
private lateinit var passwordEditText: EditText
private lateinit var rememberMeCheckBox: CheckBox
private lateinit var sharedPreferences: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
usernameEditText = findViewById(R.id.usernameEditText)
passwordEditText = findViewById(R.id.passwordEditText)
rememberMeCheckBox = findViewById(R.id.rememberMeCheckBox)
val loginButton: Button = findViewById(R.id.loginButton)
val registerButton: Button = findViewById(R.id.registerButton)
sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE)
loginButton.setOnClickListener {
val username = usernameEditText.text.toString()
val password = passwordEditText.text.toString()
if (validateLogin(username, password)) {
if (rememberMeCheckBox.isChecked) {
rememberUser(username, password)
}
val intent = Intent(this@LoginActivity, MainActivity::class.java)
startActivity(intent)
// finish()
} else {
Toast.makeText(this@LoginActivity, "Invalid username or password", Toast.LENGTH_SHORT).show()
}
}
registerButton.setOnClickListener {
val username = usernameEditText.text.toString()
val password = passwordEditText.text.toString()
if (registerUser(username, password)) {
Toast.makeText(this@LoginActivity, "Registration successful", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@LoginActivity, "Username already exists", Toast.LENGTH_SHORT).show()
}
}
}
private fun validateLogin(username: String, password: String): Boolean {
val storedPassword = sharedPreferences.getString(username, null)
return storedPassword == password
}
private fun rememberUser(username: String, password: String) {
val editor = sharedPreferences.edit()
editor.putString(username, password)
editor.apply()
}
private fun registerUser(username: String, password: String): Boolean {
if (!sharedPreferences.contains(username)) {
val editor = sharedPreferences.edit()
editor.putString(username, password)
editor.apply()
return true
}
return false
}
}
DatabaseHelper.kt
package com.example.mylibrary
import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.widget.Toast
class DatabaseHelper(context: Context, name: String, version: Int) :
SQLiteOpenHelper(context, name, null, version) {
private val createBook = "create table Book (" +
"id integer primary key autoincrement," +
"author text," +
"price real," +
"pages integer," +
"name text," +
"categoryId integer)"
private val createCategory = "create table Category (" +
"id integer primary key autoincrement," +
"category_name text," +
"category_code integer)"
override fun onCreate(db: SQLiteDatabase) {
db.execSQL(createBook)
db.execSQL(createCategory)
// Toast.makeText(this@DatabaseHelper, "Tables created successfully", Toast.LENGTH_SHORT).show()
// 插入经济类别记录
val contentValues = ContentValues().apply {
put("category_name", "经济类")
put("category_code", 1)
}
db.insert("Category", null, contentValues)
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
db.execSQL("DROP TABLE IF EXISTS Book")
db.execSQL("DROP TABLE IF EXISTS Category")
onCreate(db)
}
companion object {
const val TABLE_NAME = "Book"
}
}
AddBookActivity.kt
// AddBookActivity.kt
package com.example.mylibrary
import android.content.ContentValues
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class AddBookActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_add_book)
val dbHelper = DatabaseHelper(this, "BookStore.db", 2)
val addBookButton: Button = findViewById(R.id.addBookButton)
addBookButton.setOnClickListener {
val nameEditText: EditText = findViewById(R.id.nameEditText)
val authorEditText: EditText = findViewById(R.id.authorEditText)
val priceEditText: EditText = findViewById(R.id.priceEditText)
标签:username,Toast,password,val,import,android,ContentProvider
From: https://blog.csdn.net/2201_75709573/article/details/140880810