我尝试将List[Ccountry]
从一个活动发送到另一个活动,其中Ccountry
是一个可以列举的案例类。所有代码都是用Scala编写的。问题是我在行ClassCastException
中发送列表时收到intent.putExtra("foo", list.asInstanceOf[Parcelable])
。谁能告诉我这里的问题是什么?
Logcat错误
FATAL EXCEPTION: main
Process: com.sam.scalasample, PID: 15003
java.lang.ClassCastException: scala.collection.immutable.$colon$colon cannot be cast to android.os.Parcelable
at com.sam.scalasample.MainActivity$$anon$11.onClick(MainActivity.scala:173)
参与第二项活动
val bundle: Bundle = getIntent.getExtras
var foo: List[Ccountry] = List()
if (bundle != null) {
foo = bundle.getParcelable("foo").asInstanceOf[List[Ccountry]]
}
发送数据
sendArrayList.setOnClickListener(new OnClickListener {
override def onClick(v: View): Unit = {
var intent: Intent = new Intent(MainActivity.this, classOf[ParcelActivity])
var list: List[Ccountry] = List()
var listBuffer: ListBuffer[Ccountry] = new ListBuffer[Ccountry]()
listBuffer += Ccountry("AF", "Afghanistan")
listBuffer += Ccountry("AL", "Albania")
listBuffer += Ccountry("DZ", "Algeria")
list = listBuffer.toList
intent.putExtra("foo", list.asInstanceOf[Parcelable])
intent.putExtra(Parse.KEY, Parse.ARRAYLIST)
startActivity(intent)
}
})
答案 0 :(得分:0)
我在发送arraylist的类中导入了“scala.collection.JavaConversions._”。
//Getting it
if(getIntent!=null){
if(getIntent.getExtras.getString(Parse.KEY).equals(Parse.ARRAYLIST)){
val bundle: Bundle = getIntent.getExtras
var array = new util.ArrayList[Ccountry]()
if (bundle != null) {
array = bundle.getParcelableArrayList("foo")
println("sammy_array_size: "+array.size())
}
}
//Sending it
sendArrayList.setOnClickListener(new OnClickListener {
override def onClick(v: View): Unit = {
var intent: Intent = new Intent(MainActivity.this, classOf[ParcelActivity])
var list: List[Ccountry] = List()
var listBuffer: ListBuffer[Ccountry] = new ListBuffer[Ccountry]()
listBuffer += Ccountry("AF", "Afghanistan")
listBuffer += Ccountry("AL", "Albania")
listBuffer += Ccountry("DZ", "Algeria")
list = listBuffer.toList
val array = new util.ArrayList(list)
val bundle: Bundle = new Bundle
bundle.putParcelableArrayList("foo", array)
intent.putExtras(bundle)
intent.putExtra(Parse.KEY, Parse.ARRAYLIST)
startActivity(intent)
}
})