英文:
Not Inflating Layout While Retrieving From Sqlite Database In Kotlin
问题
I understand that you'd like me to translate the code-related portions of your text. Here is the translated code:
我正在处理一个功能,即当用户注册他们的电子邮件和密码时,将其保存在SQLite中并可以在名为Account Manager的活动中检索。
我正在使用Kotlin进行编码,我只是根据SQLite中的数据膨胀布局。
电子邮件和密码已成功添加,但在RecyclerView中不工作的布局膨胀。布局未膨胀。PFB的屏幕截图[未膨胀布局的活动][1]
我的DataBaseHolder类:
```kotlin
package adapter
import android.database.sqlite.SQLiteOpenHelper
import adapter.DataBaseHolder
import android.database.sqlite.SQLiteDatabase
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.widget.Toast
class DataBaseHolder(private val context: Context?) : SQLiteOpenHelper(
context, name, null, Database_VERSION
) {
override fun onCreate(DB: SQLiteDatabase) {
val query = "CREATE TABLE " + TABLE_NAME +
" (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_EMAIL + " TEXT, " +
COLUMN_PASSWORD + " TEXT);"
DB.execSQL(query)
}
override fun onUpgrade(DB: SQLiteDatabase, i: Int, i1: Int) {
DB.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME)
onCreate(DB)
}
fun add(email: String?, password: String?) {
val DB = this.writableDatabase
val cv = ContentValues()
cv.put(COLUMN_EMAIL, email)
cv.put(COLUMN_PASSWORD, password)
val result = DB.insert(TABLE_NAME, null, cv)
if (result == -1L) {
Toast.makeText(context, "FAILED", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(context, "ADDED SUCCESSFUL", Toast.LENGTH_SHORT).show()
}
}
companion object {
private const val name = "AccountManager.db"
private const val Database_VERSION = 1
const val TABLE_NAME = "ACCOUNT_MANAGER"
const val COLUMN_ID = "accountmanager"
const val COLUMN_EMAIL = "USER_EMAIL"
const val COLUMN_PASSWORD = "USER_PASSWORD"
}
fun readData(): Cursor? {
val query: String = "SELECT * FROM " + TABLE_NAME
val DB: SQLiteDatabase = this.readableDatabase
var cursor: Cursor? = null
if (DB != null) {
cursor = DB.rawQuery(query, null)
}
return cursor
}
}
这只是代码的一部分,如果您需要进一步的翻译,请告诉我。
英文:
I am working with one feature which is while user register their Email and password that will be saved in sqlite and can be retrieved in activity Named Account Manager.
I am using kotlin for coding and I just inflate layout according to data in sqlite. Email and password added successfully but the layout inflating not working in Recycler View. The layout doesn't inflated. PFB the screen shot Activity Without Layout Inflated
My DataBaseHolder Class :
package adapter
import android.database.sqlite.SQLiteOpenHelper
import adapter.DataBaseHolder
import android.database.sqlite.SQLiteDatabase
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.widget.Toast
class DataBaseHolder(private val context: Context?) : SQLiteOpenHelper(
context, name, null, Database_VERSION
) {
override fun onCreate(DB: SQLiteDatabase) {
val query = "CREATE TABLE " + TABLE_NAME +
" (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_EMAIL + " TEXT, " +
COLUMN_PASSWORD + " TEXT);"
DB.execSQL(query)
}
override fun onUpgrade(DB: SQLiteDatabase, i: Int, i1: Int) {
DB.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME)
onCreate(DB)
}
fun add(email: String?, password: String?) {
val DB = this.writableDatabase
val cv = ContentValues()
cv.put(COLUMN_EMAIL, email)
cv.put(COLUMN_PASSWORD, password)
val result = DB.insert(TABLE_NAME, null, cv)
if (result == -1L) {
Toast.makeText(context, "FAILED", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(context, "ADDED SUCCESSFUL", Toast.LENGTH_SHORT).show()
}
}
companion object {
private const val name = "AccountManager.db"
private const val Database_VERSION = 1
const val TABLE_NAME = "ACCOUNT_MANAGER"
const val COLUMN_ID = "accountmanager"
const val COLUMN_EMAIL = "USER_EMAIL"
const val COLUMN_PASSWORD = "USER_PASSWORD"
}
fun readData(): Cursor? {
val query : String = "SELECT * FROM " + TABLE_NAME
val DB : SQLiteDatabase = this.readableDatabase
var cursor: Cursor? = null
if(DB != null){
cursor = DB.rawQuery(query, null)
}
return cursor
}
}
Register Activity(Here Only I add Email And Password To Sqlite):
package com.lordshivaproduct.commenting_FROM_SHIVAN
import adapter.DataBaseHolder
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.view.View
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.google.android.material.snackbar.Snackbar
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.UserProfileChangeRequest
import com.google.firebase.storage.FirebaseStorage
import com.google.firebase.storage.StorageReference
@Suppress("DEPRECATION")
class Register_user_soma : AppCompatActivity() {
private lateinit var imgshivprofile : ImageView
private lateinit var pickedImage: Uri
private lateinit var userName : EditText
private lateinit var userEmail : EditText
private lateinit var userPassword: EditText
private lateinit var usershivConfirmpassword : EditText
private lateinit var progresomam : ProgressBar
private lateinit var Image: ImageView
private lateinit var rglogsh:TextView
private lateinit var reg: Button
// private
var PReqCode = 1
private var REQUESTCODE: Int = 1
private lateinit var auth: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_register_user_soma)
supportActionBar?.hide()
userName = findViewById(R.id.Nameregshiv)
userEmail = findViewById(R.id.Emailregshiv)
userPassword = findViewById(R.id.Passwordshiv)
usershivConfirmpassword = findViewById(R.id.confirmpassword)
reg = findViewById(R.id.button)
auth = FirebaseAuth.getInstance()
imgshivprofile = findViewById(R.id.imageshivprofile)
Image = findViewById(R.id.imageViewofsh)
progresomam = findViewById(R.id.progressBarofsomam)
progresomam.visibility = View.GONE
val ccountManager:TextView = findViewById(R.id.AccountManager)
ccountManager.setOnClickListener{
startActivity(Intent(this, AccountManager::class.java))
// val inflater : LayoutInflater = this.getSystemService(this.LAYOUT_INFLATER_SERVICE) as LayoutInflater
// val v :View= LayoutInflater.from(this).inflate(R.layout.accountmanagersheet, null,false)
// val dialog = BottomSheetDialog(this)
// dialog.setContentView(v)
//dialog.setCancelable(true)
// dialog.show()
}
rglogsh = findViewById(R.id.loginforsh)
imgshivprofile.setOnClickListener{
if(Build.VERSION.SDK_INT >= 22){
checkAndRequestForPermission()
}else {
openGallery()
}
}
rglogsh.setOnClickListener{
startActivity(Intent(this, Login::class.java))
}
reg.setOnClickListener{
val name = userName.text.toString()
val email = userEmail.text.toString()
val pass = userPassword.text.toString()
val pass2 = usershivConfirmpassword.text.toString()
reg.visibility = View.GONE
progresomam.visibility = View.VISIBLE
if(name.isEmpty() || email.isEmpty() || pass.isEmpty() || pass != pass2 || pickedImage.toString() == null){
if(pass.length < 8){
createSnackbar( "Password must be greater than 8 characters")
progresomam.visibility = View.GONE
reg.visibility = View.VISIBLE
}
createSnackbar("Please verify all fields")
progresomam.visibility = View.GONE
reg.visibility = View.VISIBLE
} else{
createUserAccount(email, name, pass)
Accountanager(email,pass)
reg.visibility = View.GONE
progresomam.visibility =View.VISIBLE
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(resultCode == RESULT_OK && requestCode == REQUESTCODE && data != null){
pickedImage = data.data!!
imgshivprofile.setImageURI(pickedImage)
Image.visibility = View.GONE
}
}
private fun createUserAccount(email: String, name: String, pass: String) {
auth.createUserWithEmailAndPassword(email, pass)
.addOnCompleteListener {
if(it.isSuccessful){
createSnackbar("profile created")
updateUserInfo(name, pickedImage, auth.currentUser)
} else {
it.exception?.message?.let { it1 -> createSnackbar(it1) }
reg.visibility = View.VISIBLE
progresomam.visibility =View.GONE
}
}
}
private fun Accountanager(email:String,pass:String){
val db : DataBaseHolder = DataBaseHolder(this)
db.add(email,pass)
}
private fun updateUserInfo(name: String, pickedImage: Uri, currentUser: FirebaseUser?) {
val storage: StorageReference = FirebaseStorage.getInstance().reference.child("shiv photos")
val filePath: StorageReference = storage.child(pickedImage.lastPathSegment.toString())
filePath.putFile(pickedImage).addOnSuccessListener {
filePath.downloadUrl.addOnSuccessListener {
val profileUpdate: UserProfileChangeRequest = UserProfileChangeRequest.Builder()
.setDisplayName(name)
.setPhotoUri(it)
.build()
currentUser!!.updateProfile(profileUpdate).addOnCompleteListener {
if(it.isSuccessful){
createSnackbar("Register completed")
progresomam.visibility = View.GONE
startActivity(Intent(this, Onboardingshiva::class.java))
}
}
}
}
}
private fun checkAndRequestForPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
createSnackbar( "Accept for Required Permission")
} else {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
PReqCode)
}
} else {
openGallery()
}
}
private fun openGallery() {
val galleryintent = Intent(Intent.ACTION_GET_CONTENT)
galleryintent.type = "image/*"
startActivityForResult(galleryintent, REQUESTCODE)
}
private fun createSnackbar(message: String){
val regusomam: View = findViewById(R.id.regsiv)
Snackbar.make(regusomam, message, Snackbar.LENGTH_LONG).show()
}
}
AccountManager(Here Only I am Getting value from Sqlite):
package com.lordshivaproduct.commenting_FROM_SHIVAN
import adapter.DataBaseHolder
import adapter.accuntmanagerdb
import android.database.Cursor
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
class AccountManager : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_accountmanager)
val mydb:DataBaseHolder = DataBaseHolder(this)
val dbemail : ArrayList<String> = ArrayList()
val dbpassword:ArrayList<String> = ArrayList()
val acRecyclerView: RecyclerView = findViewById(R.id.acylerview)
acRecyclerView.setHasFixedSize(false)
acRecyclerView.addItemDecoration(
DividerItemDecoration(
this, DividerItemDecoration.VERTICAL
)
)
displaydata(mydb, dbemail, dbpassword)
val linearLayoutManager = LinearLayoutManager(this)
acRecyclerView.layoutManager = linearLayoutManager
val accountmanagerdb = accuntmanagerdb(this,dbemail,dbpassword)
acRecyclerView.setAdapter(accountmanagerdb)
}
fun displaydata(mydb: DataBaseHolder, dbemail:ArrayList<String>, dbpassword:ArrayList<String>){
val cursor : Cursor? = mydb.readData()
if (cursor != null) {
if(cursor.count == 0 ){
Toast.makeText(this, "No Data", Toast.LENGTH_SHORT).show()
}
else{
while(cursor.moveToNext()){
dbemail.add(cursor.getString(0))
dbpassword.add(cursor.getString(1))
}
}
}
}
}
acccountmanageradapter(Adapter Class: Inflating Layout)
package adapter
import android.content.Context
import android.content.Intent
import java.util.ArrayList
import androidx.recyclerview.widget.RecyclerView
import android.view.ViewGroup
import android.view.LayoutInflater
import android.view.View
import com.lordshivaproduct.commenting_FROM_SHIVAN.R
import android.widget.TextView
import com.lordshivaproduct.commenting_FROM_SHIVAN.Login
import com.lordshivaproduct.commenting_FROM_SHIVAN.viewing_post_nama
class accuntmanagerdb internal constructor(
var context: Context,
var dbemail: ArrayList<String>,
var dbpassword: ArrayList<String>
) : RecyclerView.Adapter<accuntmanagerdb.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val inflater = LayoutInflater.from(context)
val view = inflater.inflate(R.layout.accountmanagerui, parent, false)
return MyViewHolder(view)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.email.text = dbemail[position].toString()
holder.password.text = dbpassword[position].toString()
}
override fun getItemCount(): Int {
return 0
}
inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var email: TextView
var password: TextView
init {
email = itemView.findViewById(R.id.EMAIL)
password = itemView.findViewById(R.id.PASSWORD)
itemView.setOnClickListener{
val intent = Intent(context, Login::class.java)
val position: Int = adapterPosition
intent.putExtra("Email", dbemail[position].toString())
intent.putExtra("Password", dbpassword[position].toString())
context.startActivity(intent)
}
}
}
}
Sorry For Lot's Of Line, I know i added lot of lines here but I dont know what is the issue so please help me solve this
Thanks In Advance
答案1
得分: 0
The error is within your Adapter accuntmanagerdb:
override fun getItemCount(): Int {
return 0
}
You must return the actual count of the items here, if you return 0 the list thinks it has zero items.
Correct way in your case would be:
override fun getItemCount(): Int {
return dbemail.size
}
英文:
The error is within your Adapter accuntmanagerdb:
override fun getItemCount(): Int {
return 0
}
You must return the acutal count of the items here, if you return 0 the list thinks it has zero items.
Correct way in your case would be:
override fun getItemCount(): Int {
return dbemail.size
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论