Ошибка времени выполнения DatabaseException: не удалось преобразовать значение типа java.lang.Long в строку - PullRequest
0 голосов
/ 23 января 2019

Я получаю ошибку com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String in line 53

Строка var note = n.getValue(Note::class.java)

Я застрял на этой ошибке некоторое время, так как я достаточно новичок в программировании, и я не уверен, что делать, любая помощь приветствуется, большое спасибо

package com.example.gearoidodonovan.books

import android.app.AlertDialog
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.renderscript.Sampler
import android.widget.Toast
import com.google.firebase.database.*
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.add_note.view.*
import java.text.SimpleDateFormat
import java.util.*


class MainActivity : AppCompatActivity() {

    var mRef:DatabaseReference? = null
    var mNoteList:ArrayList<Note>?= null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        val database = FirebaseDatabase.getInstance()
        mRef = database.getReference("Notes")
        mNoteList = ArrayList()



        add_new_note.setOnClickListener {

            showDialogAddNote()


        }
    }

    override fun onStart(){
        super.onStart()
        mRef?.addValueEventListener(object : ValueEventListener{
            override fun onCancelled(p0: DatabaseError) {
            }

            override fun onDataChange(p0: DataSnapshot) {
                for (n in p0!!.children) {
                    var note = n.getValue(Note::class.java)
                    mNoteList?.add(note!!)

                }

                val noteAdapter = NoteAdapter(applicationContext, mNoteList!!)
                note_list_view.adapter = noteAdapter

            }

        })

    }


    fun showDialogAddNote() {
        val alertBuilder = AlertDialog.Builder(this)

        val view = layoutInflater.inflate(R.layout.add_note, null)

        alertBuilder.setView(view)

        val alertDialog = alertBuilder.create()
        alertDialog.show()


        view.btnSaveNote.setOnClickListener {
            val title = view.etTitle.text.toString()
            val note = view.etNote.text.toString()

            if (title.isNotEmpty() && note.isNotEmpty()) {
                var id = mRef!!.push().key!! //reference 1

                var myNote = Note(id, title, note, getCurrentDate())
                mRef!!.child(id).setValue(myNote)
                alertDialog.dismiss()


            } else {
                Toast.makeText(this, "Empty", Toast.LENGTH_LONG).show()
            }


        }

    }

    fun getCurrentDate(): String{
        val calendar = Calendar.getInstance()
        val mdformat = SimpleDateFormat("EEEE hh:mm a ")
        val strDate = mdformat.format(calendar.time)
        return strDate
    }
}

Вот мой класс заметок

package com.example.gearoidodonovan.books

import com.google.firebase.database.Exclude
import com.google.firebase.database.ServerValue

class Note {
    var id:String?= null
    var title:String? = null
    var note:String?= null
    var timestamp: String? = null

    constructor(){

    }

    constructor(id: String, title: String, note: String, timestamp: String){
        this.id = id
        this.title = title
        this.note = note
        this.timestamp = timestamp
    }
}

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Заказать атрибуты вашего class note следующим образом

var id:String?= null
var note:long?= null
var timestamp: String? = null
var title:String? = null```
0 голосов
/ 23 января 2019

вы получаете эту ошибку, потому что у вас есть поле типа long в вашем узле firebase, которое вы сохраняете в String.убедитесь, что типы данных такие же, как в узле firebase и в вашем классе данных.

Я думаю, что в большинстве случаев идентификатор имеет тип данных long, вы можете проверить это и изменить свой класс данных Note в соответствии с этим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...