gpt4 book ai didi

android - Parcelable遇到IOException写入可序列化对象引起java.io.NotSerializableException : retrofit2. Retrofit$1

转载 作者:搜寻专家 更新时间:2023-11-01 09:29:04 24 4
gpt4 key购买 nike

我的 ViewModel 实现了可序列化,我已经定义了如下按钮点击方法。

public class FragmentHomeViewModel
extends BaseObservable
implements Serializable {
private Rerofit retrofit;
private HomeScreen activity;

public FragmentHomeViewModel(HomeScreen activity) {

this.activity = activity;
retrofit = MyGlobal.getMyGlobale(activity).getNetComponent().retrofit();

}
//
//....code

public void onClickCuisine(View view){
Intent intent = new Intent(view.getContext(), SelectCuisineActivity.class);
(view.getContext()).startActivity(intent);
Log.e("is clicked"," may be");
}


}

这是我的 xml 类附加到这个 View 模型

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<data class="Item4DataMindingCuisine">
<import type="com.aman.camellia.kniterider.utils.Constrants" />
<variable
name="index"
type="int"/>
<variable
name="viewModel"
type="com.aman.camellia.kniterider.viewmodel.FragmentHomeViewModel"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dim6dp"
android:layout_marginLeft="@dimen/dim10dp">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginTop="8dp"
android:text="View All"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/text16sp"
android:onClick="@{viewModel::onClickCuisine}"
app:fontText="@{Constrants.BOLD_FONT}"
/>

</RelativeLayout>

</layout>

现在在 textview 上点击我得到

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.aman.camellia.kniterider.viewmodel.FragmentHomeViewModel)

 Caused by: java.io.NotSerializableException: retrofit2.Retrofit$1

知道为什么会发生这个错误。我认为这个错误的原因可能是我使用的 retrofit (实际上我为此使用了 Dagger )。

最佳答案

好吧,我终于得到了答案。这个问题的原因是,我的 viewmodel 实现 Serializable 和 retrofit 实例未序列化,因此您需要序列化 ​​retrofit 或将 retrofit 变量设置为 transient,这样它就不会被序列化。之后我的 View 模型将是...

public class FragmentHomeViewModel
extends BaseObservable
implements Serializable {
transient Rerofit retrofit;
private HomeScreen activity;

public FragmentHomeViewModel(HomeScreen activity) {

this.activity = activity;
retrofit = MyGlobal.getMyGlobale(activity).getNetComponent().retrofit();

}
//
//....code

public void onClickCuisine(View view){
Intent intent = new Intent(view.getContext(), SelectCuisineActivity.class);
(view.getContext()).startActivity(intent);
Log.e("is clicked"," may be");
}


}

然后另一个 Activity 成功开始。

关于android - Parcelable遇到IOException写入可序列化对象引起java.io.NotSerializableException : retrofit2. Retrofit$1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48717880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com