首页 > 其他分享 >ContentProvider

ContentProvider

时间:2024-08-03 12:26:55浏览次数:9  
标签:username Toast password val import android 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)
 

标签:username,Toast,password,val,import,android,ContentProvider
From: https://blog.csdn.net/2201_75709573/article/details/140880810

相关文章

  • 深入分析 Android ContentProvider (六)
    文章目录深入分析AndroidContentProvider(六)ContentProvider的性能优化和实践案例(续)1.性能优化技巧(续)1.6.使用批量插入优化性能示例:批量插入实现1.7.使用Projections优化查询示例:使用Projections1.8.减少频繁通知示例:减少频繁通知1.9.优化查询语句示例:优......
  • 深入分析 Android ContentProvider (二)
    文章目录深入分析AndroidContentProvider(二)1.高级特性和常见使用场景1.1.使用ContentObserver监听数据变化示例:实现ContentObserver1.2.数据同步示例:实现SyncAdapter1.3.批量操作示例:批量操作1.4.权限控制示例:声明权限2.ContentProvider的设计总结......
  • 深入分析 Android ContentProvider (一)
    文章目录深入分析AndroidContentProvider(一)1.Android中的ContentProvider设计说明1.1.ContentProvider的设计初衷1.2.ContentProvider的基本结构1.3.ContentProvider的实现示例:实现一个简单的ContentProvider1.4.ContentProvider的使用2.ContentPro......
  • ContentProvider 之 写入联系人数据
    在项目ContentProviderSample代码基础上实现写入共享联系人数据的示例,具体步骤如下:在AndroidManifest.xml中,添加写入联系人数据的权限编辑布局文件activity_contacts.xml,界面上布局三个文本输入框用于填写联系人名称、电话号码和邮箱账号和确认写入按钮。编写代码ContactsActivi......
  • Android ContentProvider使用
    近来使用下项目上用的不多的东西在自己的app,记录下遇到的问题:项目地址:码云在AndroidManifest.xml添加provider时,权限问题。添加android:permission=”…”,这样控制其他app访问权限使app更加安全,permission是允许读写权限,writepermission是允许写权限,readpermission是允许读权限......
  • Android ContentProvider详解
    一.Android四大组件Android四大组件是Activity,Service,ContentProvider,BroadcastReceiver。Activity作为程序界面,直接与用户交互Service运行在后台,没有界面,完成特定的功能ContentProvider维护应用数据,方便应用本身或其它应用访问BroadcastReceiver提供异步广播消息接收机制,......
  • ContentProvider的启动
    ContentProvider的工作离不开AMS(ActivityManagerService),事实上,四大组件的工作流程都离不开AMS。我们在创建一个ContentProvider的时候,除了新建一个类继承并重写方法,还需要在AndroidManifest中进行注册,而AndroidManifest就是AMS进行处理的。AndroidManifest会在当前应用被创建时进......
  • 【Android】使用ContentProvider实现跨进程通讯
    1前言​ContentProvider即内容提供器,是Android四大组件之一,为App存取数据提供统一的对外接口,让不同的应用之间可以共享数据。​如图,Server端通过Content......
  • ContentProvider初涉
    ContentProvider(内容提供者)是安卓四大组件之一它的主要作用:我们想在自己的应用中访问别的应用或者ContentProvider暴露给我们的一些数据如联系人或短信等。并且想对这......
  • ContentProvider+BroadCast的使用
    内容提供者的官方定义如下:  首先是ContentProvider的使用,翻译成中文就是内容提供者,作用就是比如我在从微信往qq传一张图片,我需要一个内容提供者,这里我的微信里面的图......