fun launchNextScreen(context: Context, people: People): Intent {
val intent = Intent(context, NextScreenActivity::class.java)
intent.putExtra(EXTRA_PEOPLE, (Parcelable) people)
//intent.putExtra(EXTRA_PEOPLE, people as Parcelable)
//intent.putExtra(EXTRA_PEOPLE, people)
// tried above all three ways
return intent
}
Run Code Online (Sandbox Code Playgroud)
试过上面的代码,通过使用kotlin通过intent传递People类型的对象,但是得到了错误.请帮我解决这个问题.
我有这样的Java parcelable:
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public KwerendaGraficzna createFromParcel(Parcel in) {
return new KwerendaGraficzna(in);
}
public KwerendaGraficzna[] newArray(int size) {
return new KwerendaGraficzna[size];
}
};
Run Code Online (Sandbox Code Playgroud)
现在尝试在Kotlin中实现它:
companion object {
@SuppressWarnings("rawtypes")
val CREATOR: Parcelable.Creator<KwerendaGraficzna!> = object : Parcelable.Creator<KwerendaGraficzna!> {
override fun createFromParcel(`in`: Parcel): KwerendaGraficzna {
return KwerendaGraficzna(`in`)
}
override fun newArray(size: Int): Array<KwerendaGraficzna!> {
return arrayOfNulls<KwerendaGraficzna!>(size)
}
}
}
Run Code Online (Sandbox Code Playgroud)
arrayOfNulls
KwerendaGraficzna
在声称收到要求时不会编译KwerendaGraficzna?
那我该怎么做?
我有一个类,我用它作为我的数据模型RecyclerView
,以便将此类的对象从一个活动传递到另一个活动,Intent
我必须通过它Parcelable
现在的问题是我能够将对象从一个活动发送到另一个活动并检索它,这样应用程序就不会崩溃,而是继续投入ClassNotFoundException
logcat屏幕.
我究竟做错了什么?
----> Person.kt
@Parcelize
class Person(var name: String, var username: String, var address: String, val avatar: Int) : Parcelable
Run Code Online (Sandbox Code Playgroud)
---->在MainActivity.kt中
val intent = Intent(this, ProfilePage::class.java)
intent.putExtra("clicked_person",person)
startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
---->.onCreate()
在ProfilePAge.kt中
var person = intent.getParcelableExtra<Person>("clicked_person") as Person
Run Code Online (Sandbox Code Playgroud)
而且 Exception
E/Parcel: Class not found when unmarshalling: com.example.testkot.kotlinapp.Person
java.lang.ClassNotFoundException: com.example.testkot.kotlinapp.Person
Run Code Online (Sandbox Code Playgroud)
请记住,应用程序不会崩溃,它会继续工作,但会在logcat中显示异常
我目前正在尝试实验(这可能就是为什么它不起作用......)@Parcelize
注释来生成Parcelable
代码.大多数类型似乎工作正常,但我有问题Serializable
抛出NoSuchMethodError
:
10-05 13:55:18.549 20808-20808/com.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app, PID: 20808
java.lang.NoSuchMethodError: No virtual method writeSerializable(Ljava/util/Date;)V in class Landroid/os/Parcel;
or its super classes (declaration of 'android.os.Parcel' appears in /system/framework/framework.jar)
at com.app.models.Job.writeToParcel(Job.kt)
at android.os.Parcel.writeParcelable(Parcel.java:1496)
at android.os.Parcel.writeValue(Parcel.java:1402)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:724)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)
at android.os.Bundle.writeToParcel(Bundle.java:1157)
at android.os.Parcel.writeBundle(Parcel.java:764)
at android.content.Intent.writeToParcel(Intent.java:8687)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
at android.app.Activity.startActivityForResult(Activity.java:4225)
at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
at android.app.Activity.startActivityForResult(Activity.java:4183)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:711)
at android.app.Activity.startActivity(Activity.java:4522)
at android.app.Activity.startActivity(Activity.java:4490)
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过将Date对象更改为字符串来解决这个问题,但不愿意.有没有其他人遇到这个问题,除了使用字符串之外,还可以提供一个可行的解决方法?
如果需要,这里是参考的实现:
@Parcelize
data class Job(val id: String, …
Run Code Online (Sandbox Code Playgroud) android nosuchmethoderror parcelable kotlin kotlin-android-extensions
我sendData
从发送StartActivity
到ResultActivity
。
val sendData = SendData(10, "xyz", "yss")
sendData.e = 933
sendData.f = "hello"
sendData.g = 39
// Log.d("A", "${sendData.toString}")
val intent = Intent(this@StartActivity, ResultActivity::class.java)
intent.putExtra(RESULT_DATA, sendData)
startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
sendData = intent.extras!!.getParcelable(RESULT_DATA)
// Log.d("B", "${sendData.toString}")
Run Code Online (Sandbox Code Playgroud)
模型类看起来像这样。
@Parcelize
data class SendData(var a: Int, var b: String, var c: String) : Parcelable {
var e: Int? = null
var f: String? = null
var g: Int? = null
var isClicked = false
override fun toString(): String{
return JsonUtil.toJson(this) …
Run Code Online (Sandbox Code Playgroud)