Сериализация массивов не поддерживается, используйте вместо этого списки - PullRequest
0 голосов
/ 23 марта 2019

Я хочу загрузить изображение и текст в базу данных Firebase Realtime.Ниже мой код

var newList : ArrayList<Bitmap> = arrayListOf()    
         .......

private fun insertSellerItemData(mAuth: FirebaseAuth?) {

        val progressDialog = ProgressDialog(this@SellItemActivity)
        progressDialog.setTitle("Image is Uploading...");

        progressDialog.show()

        val userId = FirebaseAuth.getInstance().currentUser?.uid

        val item = Item(tv_title.text.toString(), newList)

        databaseReference = FirebaseDatabase.getInstance().getReference("Items").child(userId)
        databaseReference?.setValue(item)?.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Toast.makeText(application, "Data successfully added", Toast.LENGTH_SHORT).show()
            } else {
                Toast.makeText(this@SellItemActivity, "You cannot register with this mobile number", Toast.LENGTH_SHORT).show()
            }
        }
}

Элемент

class Item(val title: String,val newList: ArrayList<Bitmap>) :Serializable{}

Ошибка

 Process: com.example.lyner.authentication, PID: 24574
    com.google.firebase.database.DatabaseException: Serializing Arrays is not supported, please use Lists instead

Редактировать

Я преобразую растровое изображение в Uri перед сохранением в базу данных

val lt : ArrayList<Uri> = arrayListOf()
        for(i in newList)
        {
           val list = convertBitmaptoUri(i)
            lt.add(list)
        }
val item = Item(tv_title.text.toString(), tv_desc.text.toString(), tv_price.text.toString(),
                tv_category.text.toString(), dueDate, lt)

        databaseReference = FirebaseDatabase.getInstance().getReference("Items").child(userId)
        databaseReference?.setValue(item)?.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Toast.makeText(application, "Data successfully added", Toast.LENGTH_SHORT).show()
                progressDialog.dismiss()
            } else {
                Toast.makeText(this@SellItemActivity, "You cannot register with this mobile number", Toast.LENGTH_SHORT).show()
                progressDialog.dismiss()
            }
        }

Ошибка

 java.lang.StackOverflowError: stack size 8MB
        at java.lang.reflect.Method.invoke(Native Method)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:123)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
        at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)
2019-03-24 12:24:59.268 27163-27163/com.example.lyner.authentication E/AndroidRuntime:     at com.google.android.gms.internal.firebase_database.zzkt.zzi(Unknown Source:253)
        at com.google.android.gms.internal.firebase_database.zzkt.zzl(Unknown Source:0)
        at com.google.android.gms.internal.firebase_database.zzku.zzm(Unknown Source:185)

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Эта ошибка произошла, когда я попытался преобразовать Bitmap в Uri

 java.lang.StackOverflowError: stack size 8MB

Чтобы решить эту проблему, я преобразовал ее в String вместо Uri

val lt: ArrayList<String> = arrayListOf()
   for (i in newList) {
       val list = bitmapToString(i)
       lt.add(list)
   }

fun bitmapToString(bitmap: Bitmap): String {
    val baos = ByteArrayOutputStream()
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos)
    val b = baos.toByteArray()
    val temp = Base64.encodeToString(b, Base64.DEFAULT);
    return temp;
}

И для этой ошибки

Item does not define a no-argument constructor. If you are using ProGuard, make sure these constructors are not stripped

Я изменяю Item класс на этот

data class Item(
        val title: String = "",
        val newList: ArrayList<String>? = arrayListOf()) : Serializable
0 голосов
/ 23 марта 2019

Нельзя сохранить растровый объект в базе данных реального времени без предварительного преобразования его в строку. База данных реального времени не позволяет легко хранить двоичные данные. Вместо этого рассмотрите возможность хранения необработанных двоичных данных в облачном хранилище и вместо этого сохраните ссылку на этот файл в базе данных.

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