Android 无效的文档引用。文档引用必须有偶数个段,但问题有1个
在我的应用程序中,用户可以编写他们的问题,管理员可以重播他们问题的答案。它成功地将id文档添加到数据库中,但我收到了此错误。 我正在使用firebase firestore数据库 这是我的密码 QuestionAddActivity.ktAndroid 无效的文档引用。文档引用必须有偶数个段,但问题有1个,android,firebase,android-studio,firebase-realtime-database,google-cloud-firestore,Android,Firebase,Android Studio,Firebase Realtime Database,Google Cloud Firestore,在我的应用程序中,用户可以编写他们的问题,管理员可以重播他们问题的答案。它成功地将id文档添加到数据库中,但我收到了此错误。 我正在使用firebase firestore数据库 这是我的密码 QuestionAddActivity.kt class QuestionAddActivity : AppCompatActivity() { private lateinit var mAuth: FirebaseAuth private lateinit var db: FirebaseFires
class QuestionAddActivity : AppCompatActivity() {
private lateinit var mAuth: FirebaseAuth
private lateinit var db: FirebaseFirestore
private lateinit var storageReference: StorageReference
private lateinit var resultUri: Uri
private val admin: String = "DHIsHa2tUNMjv9DWrjdEuJIG0vP2"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_question_add)
mAuth = FirebaseAuth.getInstance()
db = FirebaseFirestore.getInstance()
storageReference = FirebaseStorage.getInstance().reference
if (mAuth.currentUser.uid == admin){
answer_edit_text.visibility = View.VISIBLE
}else if(mAuth.currentUser.uid != admin){
answer_edit_text.visibility = View.INVISIBLE
}
question_image.setOnClickListener {
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setMinCropResultSize(512, 512)
.setAspectRatio(1, 1)
.start(this);
}
submit_btn.setOnClickListener {
val question: String = question_edit_text.text.toString().trim()
val answer: String = answer_edit_text.text.toString().trim()
addQuestion(question, answer)
}
}
private fun addQuestion(question: String, answer: String) {
val userId: String = mAuth.currentUser.uid
progressBar.visibility = View.VISIBLE
val time = System.currentTimeMillis()
val questionData = QuestionData(question, answer, userId, time)
db.collection("question").add(questionData).addOnCompleteListener {task ->
if (task.isSuccessful){
progressBar.visibility = View.INVISIBLE
val intent = Intent(this,QuestionActivity::class.java)
startActivity(intent)
Log.d("question", "$task")
}else{
progressBar.visibility = View.VISIBLE
}
}
}
class AnswerActivity : AppCompatActivity() {
private lateinit var mAuth: FirebaseAuth
private lateinit var db: FirebaseFirestore
private lateinit var dbupdate: DocumentReference
private lateinit var storageReference: StorageReference
private lateinit var q: String
private lateinit var a: String
private val question:QuestionData = QuestionData()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_answer)
val bundle:Bundle? = intent.extras
q = bundle!!.getString("question").toString()
question_answer_edit_text.text = Editable.Factory.getInstance().newEditable(q)
a = bundle!!.getString("answer").toString()
answer_answer_edit_text.text = Editable.Factory.getInstance().newEditable(a)
db = FirebaseFirestore.getInstance()
var questionId: String = question.id.toString().replace("/","_")
answer_btn.setOnClickListener {
val questionData = QuestionData(q, a, question.userId, question.time)
db.collection("question").document(questionId).set(questionData)
.addOnCompleteListener{
if (it.isSuccessful) {
Log.d("Answer", "${it.result}")
}else{
Log.d("error", "${it.exception}")
}
}
}
}
class QuestionActivity : AppCompatActivity(),OnClickListener {
private lateinit var mAuth: FirebaseAuth
private lateinit var db: FirebaseFirestore
private val questionAdapter by lazy { QuestionAdapter(this) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_question)
db = FirebaseFirestore.getInstance()
val questionList = ArrayList<QuestionData>()
question_details_btn.setOnClickListener {
val i = Intent(this,QuestionAddActivity::class.java)
startActivity(i)
}
db.collection("question").addSnapshotListener{ querySnapshot: QuerySnapshot?, firebaseFirestoreException: FirebaseFirestoreException? ->
if (querySnapshot != null) {
for (doc:DocumentChange in querySnapshot.documentChanges){
val questionData:QuestionData = doc.document.toObject(QuestionData::class.java)
questionData.id = doc.document.id
questionList.add(questionData)
questionAdapter.setData(questionList)
}
}
}
setUpQuestion()
}
private fun setUpQuestion() {
question_recyclerview.layoutManager = LinearLayoutManager(this,
LinearLayoutManager.VERTICAL,false)
question_recyclerview.setHasFixedSize(true)
question_recyclerview.adapter = questionAdapter
}
override fun onClick(item: QuestionData, position: Int) {
val intent = Intent(this,AnswerActivity::class.java)
intent.putExtra("question",item.question)
intent.putExtra("answer",item.answer)
startActivity(intent)
Toast.makeText(this,"$position",Toast.LENGTH_SHORT).show()
Log.d("clicked","$position")
}
}
AnswerActivity.kt
class QuestionAddActivity : AppCompatActivity() {
private lateinit var mAuth: FirebaseAuth
private lateinit var db: FirebaseFirestore
private lateinit var storageReference: StorageReference
private lateinit var resultUri: Uri
private val admin: String = "DHIsHa2tUNMjv9DWrjdEuJIG0vP2"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_question_add)
mAuth = FirebaseAuth.getInstance()
db = FirebaseFirestore.getInstance()
storageReference = FirebaseStorage.getInstance().reference
if (mAuth.currentUser.uid == admin){
answer_edit_text.visibility = View.VISIBLE
}else if(mAuth.currentUser.uid != admin){
answer_edit_text.visibility = View.INVISIBLE
}
question_image.setOnClickListener {
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setMinCropResultSize(512, 512)
.setAspectRatio(1, 1)
.start(this);
}
submit_btn.setOnClickListener {
val question: String = question_edit_text.text.toString().trim()
val answer: String = answer_edit_text.text.toString().trim()
addQuestion(question, answer)
}
}
private fun addQuestion(question: String, answer: String) {
val userId: String = mAuth.currentUser.uid
progressBar.visibility = View.VISIBLE
val time = System.currentTimeMillis()
val questionData = QuestionData(question, answer, userId, time)
db.collection("question").add(questionData).addOnCompleteListener {task ->
if (task.isSuccessful){
progressBar.visibility = View.INVISIBLE
val intent = Intent(this,QuestionActivity::class.java)
startActivity(intent)
Log.d("question", "$task")
}else{
progressBar.visibility = View.VISIBLE
}
}
}
class AnswerActivity : AppCompatActivity() {
private lateinit var mAuth: FirebaseAuth
private lateinit var db: FirebaseFirestore
private lateinit var dbupdate: DocumentReference
private lateinit var storageReference: StorageReference
private lateinit var q: String
private lateinit var a: String
private val question:QuestionData = QuestionData()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_answer)
val bundle:Bundle? = intent.extras
q = bundle!!.getString("question").toString()
question_answer_edit_text.text = Editable.Factory.getInstance().newEditable(q)
a = bundle!!.getString("answer").toString()
answer_answer_edit_text.text = Editable.Factory.getInstance().newEditable(a)
db = FirebaseFirestore.getInstance()
var questionId: String = question.id.toString().replace("/","_")
answer_btn.setOnClickListener {
val questionData = QuestionData(q, a, question.userId, question.time)
db.collection("question").document(questionId).set(questionData)
.addOnCompleteListener{
if (it.isSuccessful) {
Log.d("Answer", "${it.result}")
}else{
Log.d("error", "${it.exception}")
}
}
}
}
class QuestionActivity : AppCompatActivity(),OnClickListener {
private lateinit var mAuth: FirebaseAuth
private lateinit var db: FirebaseFirestore
private val questionAdapter by lazy { QuestionAdapter(this) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_question)
db = FirebaseFirestore.getInstance()
val questionList = ArrayList<QuestionData>()
question_details_btn.setOnClickListener {
val i = Intent(this,QuestionAddActivity::class.java)
startActivity(i)
}
db.collection("question").addSnapshotListener{ querySnapshot: QuerySnapshot?, firebaseFirestoreException: FirebaseFirestoreException? ->
if (querySnapshot != null) {
for (doc:DocumentChange in querySnapshot.documentChanges){
val questionData:QuestionData = doc.document.toObject(QuestionData::class.java)
questionData.id = doc.document.id
questionList.add(questionData)
questionAdapter.setData(questionList)
}
}
}
setUpQuestion()
}
private fun setUpQuestion() {
question_recyclerview.layoutManager = LinearLayoutManager(this,
LinearLayoutManager.VERTICAL,false)
question_recyclerview.setHasFixedSize(true)
question_recyclerview.adapter = questionAdapter
}
override fun onClick(item: QuestionData, position: Int) {
val intent = Intent(this,AnswerActivity::class.java)
intent.putExtra("question",item.question)
intent.putExtra("answer",item.answer)
startActivity(intent)
Toast.makeText(this,"$position",Toast.LENGTH_SHORT).show()
Log.d("clicked","$position")
}
}
问题活动.kt
class QuestionAddActivity : AppCompatActivity() {
private lateinit var mAuth: FirebaseAuth
private lateinit var db: FirebaseFirestore
private lateinit var storageReference: StorageReference
private lateinit var resultUri: Uri
private val admin: String = "DHIsHa2tUNMjv9DWrjdEuJIG0vP2"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_question_add)
mAuth = FirebaseAuth.getInstance()
db = FirebaseFirestore.getInstance()
storageReference = FirebaseStorage.getInstance().reference
if (mAuth.currentUser.uid == admin){
answer_edit_text.visibility = View.VISIBLE
}else if(mAuth.currentUser.uid != admin){
answer_edit_text.visibility = View.INVISIBLE
}
question_image.setOnClickListener {
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setMinCropResultSize(512, 512)
.setAspectRatio(1, 1)
.start(this);
}
submit_btn.setOnClickListener {
val question: String = question_edit_text.text.toString().trim()
val answer: String = answer_edit_text.text.toString().trim()
addQuestion(question, answer)
}
}
private fun addQuestion(question: String, answer: String) {
val userId: String = mAuth.currentUser.uid
progressBar.visibility = View.VISIBLE
val time = System.currentTimeMillis()
val questionData = QuestionData(question, answer, userId, time)
db.collection("question").add(questionData).addOnCompleteListener {task ->
if (task.isSuccessful){
progressBar.visibility = View.INVISIBLE
val intent = Intent(this,QuestionActivity::class.java)
startActivity(intent)
Log.d("question", "$task")
}else{
progressBar.visibility = View.VISIBLE
}
}
}
class AnswerActivity : AppCompatActivity() {
private lateinit var mAuth: FirebaseAuth
private lateinit var db: FirebaseFirestore
private lateinit var dbupdate: DocumentReference
private lateinit var storageReference: StorageReference
private lateinit var q: String
private lateinit var a: String
private val question:QuestionData = QuestionData()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_answer)
val bundle:Bundle? = intent.extras
q = bundle!!.getString("question").toString()
question_answer_edit_text.text = Editable.Factory.getInstance().newEditable(q)
a = bundle!!.getString("answer").toString()
answer_answer_edit_text.text = Editable.Factory.getInstance().newEditable(a)
db = FirebaseFirestore.getInstance()
var questionId: String = question.id.toString().replace("/","_")
answer_btn.setOnClickListener {
val questionData = QuestionData(q, a, question.userId, question.time)
db.collection("question").document(questionId).set(questionData)
.addOnCompleteListener{
if (it.isSuccessful) {
Log.d("Answer", "${it.result}")
}else{
Log.d("error", "${it.exception}")
}
}
}
}
class QuestionActivity : AppCompatActivity(),OnClickListener {
private lateinit var mAuth: FirebaseAuth
private lateinit var db: FirebaseFirestore
private val questionAdapter by lazy { QuestionAdapter(this) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_question)
db = FirebaseFirestore.getInstance()
val questionList = ArrayList<QuestionData>()
question_details_btn.setOnClickListener {
val i = Intent(this,QuestionAddActivity::class.java)
startActivity(i)
}
db.collection("question").addSnapshotListener{ querySnapshot: QuerySnapshot?, firebaseFirestoreException: FirebaseFirestoreException? ->
if (querySnapshot != null) {
for (doc:DocumentChange in querySnapshot.documentChanges){
val questionData:QuestionData = doc.document.toObject(QuestionData::class.java)
questionData.id = doc.document.id
questionList.add(questionData)
questionAdapter.setData(questionList)
}
}
}
setUpQuestion()
}
private fun setUpQuestion() {
question_recyclerview.layoutManager = LinearLayoutManager(this,
LinearLayoutManager.VERTICAL,false)
question_recyclerview.setHasFixedSize(true)
question_recyclerview.adapter = questionAdapter
}
override fun onClick(item: QuestionData, position: Int) {
val intent = Intent(this,AnswerActivity::class.java)
intent.putExtra("question",item.question)
intent.putExtra("answer",item.answer)
startActivity(intent)
Toast.makeText(this,"$position",Toast.LENGTH_SHORT).show()
Log.d("clicked","$position")
}
}
我的数据库是
[1] :
这是我的错误日志
[2] :
如何解决此错误?谢谢你db.collection(“question”).document(questionId).set(questionData)中“questionId”的值是多少?添加日志以及在哪个文件/行中有错误的代码我从questionId继承questionId:questionData=questionData()对象@AlexMamo@Kamal纳扬,请看我的问题,我添加了logcat错误。希望您能理解,我不是问您从哪个类继承,而是问db.collection(“question”).document(questionId).set(questionData)中的“questionId”值。