【问题标题】:Sending an array of String and receive it using parcelable kotlin发送一个字符串数组并使用 parcelable kotlin 接收它
【发布时间】:2019-09-25 13:31:42
【问题描述】:

我一直在尝试使用 kotlin 中的 parcel 发送一个字符串数组,我尝试了几种方法,例如在使用 writeTypedArray 之前转换为数组,或者直接使用 writeStringArray。我还尝试使用 createTypedArray 和 createdStringArray 进行阅读。

在大多数情况下,我收到的内容是正确的(我的意思是数组的内部没有改变),但在某些情况下它变成了一个空值和数组中的一些链接。

我检查了我的代码,并在使用意图之前和之后打印,这就是区别所在,所以我猜是包裹的问题

这是我表达我的意图的地方,当我调用 showGenres() 时,它的节目 确切的流派,例如喜剧和生活片段

val anime : Anime = news.anime
        val intent : Intent = Intent(holder.btnViewMore.context, DetailActivity::class.java)
        news.anime.showGenres()
        intent.putExtra("choosen", anime)
        holder.btnViewMore.context.startActivity(intent)

但是,在我收到意图后,当我调用 showGenres 时,内容变为空值(其中大部分)和一些字符串,如“P��https://s4.anilist.co/file/anilistcdn/media/anime/banner/104199-ha1rxhhOb8Yp.jpg��������Comedy���� ��切片”。

anime = intent.getParcelableExtra("choosen")
    anime.showGenres()

enter image description here

以下是我的班级使用 parcellable

package com.example.jnimekuy.Model

import android.os.Parcel
import android.os.Parcelable
import android.util.Log

class Anime(
    var id: Int = 0,
    var title: String? = "",
    var image: String? = "",
    var description: String? = "",
    var status: String? = "",
    var startDate: String? = "",
    var endDate: String? = "",
    var season: String? = "",
    var episode: Int? = 1,
    var duration: Int? = 1,
    var trailer: String? = "",
    var cover: String? = "",
    var banner: String? = "",
    var genreList: List<String>? = ArrayList(),
    var avgScore: Float? = 1F
):Parcelable{
    constructor(parcel: Parcel) : this(
        parcel.readInt(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString()?.replace("<br>","",true),
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readInt(),
        parcel.readInt(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.createStringArrayList()?.filterNotNull(),
        parcel.readFloat()
    )

override fun writeToParcel(parcel: Parcel, p1: Int) {
    parcel.writeInt(id)
    parcel.writeString(title)
    parcel.writeString(image)
    parcel.writeString(description)
    parcel.writeString(status)
    parcel.writeString(startDate)
    parcel.writeString(endDate)
    parcel.writeString(season)
    episode?.let { parcel.writeInt(it) }
    duration?.let { parcel.writeInt(it) }
    parcel.writeString(trailer)
    parcel.writeString(cover)
    parcel.writeString(banner)
    parcel.writeStringList(genreList)
    avgScore?.let { parcel.writeFloat(it) }
}

fun showGenres(){
    for(i in this!!.genreList!!)
    {
        Log.d("genre",i)
    }
}

override fun describeContents(): Int {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

companion object CREATOR : Parcelable.Creator<Anime> {
    override fun createFromParcel(parcel: Parcel): Anime {
        return Anime(parcel)
    }

    override fun newArray(size: Int): Array<Anime?> {
        return arrayOfNulls(size)
    }
}

}

【问题讨论】:

    标签: arrays android-intent kotlin parcelable


    【解决方案1】:

    好的,我发现了问题,因为我使用了 let ,如果不为 null 则发送一些内容,如果为 null 则不发送任何内容,但仍会被 parcel 构造函数打开。写入和类型字符串数组没有任何问题。 我所做的是把 if null 然后仍然发送一些东西

        parcel.writeInt(id)
        parcel.writeString(title)
        parcel.writeString(image)
        parcel.writeString(description)
        parcel.writeString(status)
        parcel.writeString(startDate)
        parcel.writeString(endDate)
        parcel.writeString(season)
        if(episode != null){ parcel.writeInt(episode!!) }
        else { parcel.writeInt(0) }
        if(duration != null){ parcel.writeInt(duration!!) }
        else { parcel.writeInt(0) }
        parcel.writeString(trailer)
        parcel.writeString(cover)
        parcel.writeString(banner)
        parcel.writeStringList(genreList)
        avgScore?.let { parcel.writeFloat(it)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      相关资源
      最近更新 更多