Android 为什么我在创建意图并从第二个屏幕上的RecyclerView中的Firebase传递数据时会出现此错误
我标记了之后添加的部分(添加到代码中) 应用程序运行时,数据已成功下载 从数据库中。我可能错误地传递了这个信息 转到另一个屏幕。我试图找到一个视频连接到 数据库并在另一个屏幕上转发recicler的数据,但 没有成功,或者他们使用的是Java,我对此了解较少 MySecondacity 主要活动 带有内部类保持器的类适配器 类适配器(私有val上下文:上下文、, private val:()->Unit):RecyclerView.Adapter(){ private var datalist=mutableListOf() fun setListdata(数据:可变列表){ 数据列表=数据 } 内部类持有者(itemView:View):RecyclerView.ViewHolder(itemView){ 趣味bindView(书:书,点击:()->单位){ Glide.with(context).load(book.imageUrl).into(itemView.bookImg) itemView.nameTxt.text=book.name itemView.autorTxt.text=book.writer itemView.setOnClickListener{onItemClicked.invoke()} itemView.bookImg.setOnClickListener(View.OnClickListener{//已添加 val intent=intent(上下文,BookDescription::class.java)//添加到代码中 intent.putExtra(“noti”,book)//添加到代码中 context.startActivity(intent)//添加到代码中 }) } } override onCreateViewHolder(父级:ViewGroup,viewType:Int):Holder{ val view=LayoutInflater.from(上下文)。充气(R.layout.book_格式,父级, (错误) 报税表持有人(视图) } 覆盖BindViewHolder(holder:holder,position:Int){ val book=数据列表[位置] holder.bindView(书籍、书籍) } 重写getItemCount():Int{ 返回if(datalist.size>0){ datalist.size }否则{ 0 } } } 问题在于:Android 为什么我在创建意图并从第二个屏幕上的RecyclerView中的Firebase传递数据时会出现此错误,android,firebase,kotlin,android-recyclerview,Android,Firebase,Kotlin,Android Recyclerview,我标记了之后添加的部分(添加到代码中) 应用程序运行时,数据已成功下载 从数据库中。我可能错误地传递了这个信息 转到另一个屏幕。我试图找到一个视频连接到 数据库并在另一个屏幕上转发recicler的数据,但 没有成功,或者他们使用的是Java,我对此了解较少 MySecondacity 主要活动 带有内部类保持器的类适配器 类适配器(私有val上下文:上下文、, private val:()->Unit):RecyclerView.Adapter(){ private var datalist=
book
变量的类型为book
,显然它既不是可打包的
类,也不是可序列化的
类。您必须在书籍
类中实现这两个接口之一,才能将其添加到意图
或捆绑包
假设Book
由简单的数据类型(String
、Int
等)组成,那么您可以使用@Parcelize
注释轻松实现可包裹性
。详情如下:
在
bindView()
方法中,您有以下代码块:
但是,您实际上并没有使用此意图做任何事情
;您从其他地方开始活动:
您必须将
Book
实例传递到此方法(通过invoke(Book)
)。这将需要对适配器的click listener参数进行相应的类型更改。请编辑您的问题(它下面有一个链接),以包含您得到的确切错误消息和堆栈跟踪。我确实试图添加带有错误的其余代码,但我不断收到错误,因为我没有足够的内容。我发布了一张图片,我添加了一张有错误的图片@Frankvanpuffelenth显示该错误有一个很好的理由,因为您的问题在细节上确实相当浅显。将错误消息显示为文本有助于做到这一点,但不要将其标记为代码,而是将其标记为一个块(每行开头都有
)。由于您是一个真正的救命稻草,因此成功添加了其余的代码。我真的很感谢你为我在互联网上搜索数天来解决这个问题所做的努力@由于您的帮助,错误已消失,但数据仍无法传输到其他屏幕。你知道我的代码有什么问题吗?应用程序被连接到Firebase。@我已经更新了我的答案。如果我要求更多的澄清,我是粗鲁的,我是这方面的学生和初学者。请@Ben P.可能有更简单的方法来传输这些数据,我现在很困惑…:(
class BookDescription : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_book_description)
var books = intent.getSerializableExtra("noti") as Book //added to code
Glide.with(this).load(books.imageUrl).into(bookImg2)// added to code
nameTxt2.text = books.name //added to code
autorTxt2.text = books.writer //added to code
}
}
class MainActivity : AppCompatActivity() {
private lateinit var adapter : Adapter
private val viewModel by lazy { ViewModelProviders.of(this).get(MainViewModel::class.java)}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setUpRecyclerView()
}
private fun setUpRecyclerView(){
adapter = Adapter(this){
startBookDescription()
}
recycle.layoutManager = GridLayoutManager(this, 2)
recycle.adapter = adapter
observerData()
}
fun observerData(){
viewModel.fetchUserData().observe(this,Observer{
adapter.setListdata(it)
adapter.notifyDataSetChanged()
})
}
private fun startBookDescription(){
val intent = Intent (this, BookDescription::class.java )
startActivity(intent)
}
}
class Adapter(private val context: Context,
private val onItemCliked: () -> Unit ) : RecyclerView.Adapter<Adapter.Holder>() {
private var datalist = mutableListOf<Book>()
fun setListdata(data: MutableList<Book>){
datalist = data
}
inner class Holder(itemView : View) : RecyclerView.ViewHolder(itemView){
fun bindView(book: Book, onItemClicked: () -> Unit){
Glide.with(context).load(book.imageUrl).into(itemView.bookImg)
itemView.nameTxt.text = book.name
itemView.autorTxt.text= book.writer
itemView.setOnClickListener { onItemClicked.invoke() }
itemView.bookImg.setOnClickListener(View.OnClickListener { //added
val intent = Intent(context, BookDescription::class.java)//added to code
intent.putExtra("noti", book)//added to code
context.startActivity(intent)//added to code
})
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val view = LayoutInflater.from(context).inflate(R.layout.book_format, parent,
false )
return Holder(view)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
val book = datalist[position]
holder.bindView(book, onItemCliked)
}
override fun getItemCount(): Int {
return if (datalist.size> 0){
datalist.size
}else{
0
}
}
}
intent.putExtra("noti", book)
val intent = Intent(context, BookDescription::class.java)//added to code
intent.putExtra("noti", book)//added to code
context.startActivity(intent)//added to code
})
private fun startBookDescription(){
val intent = Intent (this, BookDescription::class.java )
startActivity(intent)
}