ContentProvider

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)
 
  • 15
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塔塔o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值