我正在使用 SharedPreferences 來存盤我的 android 的片段串列,但是它給了我數千行沒有意義的錯誤:
2021-12-07 17:09:13.228 14833-14833/? E/AndroidRuntime:在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245) 在 com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69) 在 com .google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245) at com.google.gson。 Gson$FutureTypeAdapter.write(Gson.java:1058) 在......
(只是錯誤訊息的一小部分)我試圖存盤一個字串串列,它作業正常,但是如果我切換到一個帶有片段串列的物件,它就會失敗。
這是我的 object.java:
public class CardList {
ArrayList<Card> list; //Card is my fragments
public CardList(ArrayList<Card> list) {
this.list = list;
}
public void updateList(Card c) {
list.add(c);
}
public int getListSize() {
return list.size();
}
}
這是我的 MainActivity.java,這里的新意圖只是測驗當我回到 MainActivity 時是否可以取回我的資料
public class MainActivity extends AppCompatActivity {
public static final String WEATHER_PREFS = "weatherPrefs";
public CardList cardList;
public ArrayList<Card> cards;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cards = new ArrayList<>();
cardList = new CardList(cards);
SharedPreferences setting = getSharedPreferences(WEATHER_PREFS,MODE_PRIVATE);
Gson gson = new Gson();
String savedList = setting.getString("cardList","");
if (!savedList.equals("")) {
cardList = gson.fromJson(savedList,CardList.class);
}
Button btn= findViewById(R.id.switchActtivity);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
Gson gson = new Gson();
String savedInstanceString = gson.toJson(cardList);
SharedPreferences setting = getSharedPreferences(WEATHER_PREFS,MODE_PRIVATE);
SharedPreferences.Editor editor = setting.edit();
editor.putString("cardList",savedInstanceString);
editor.apply();
startActivity(intent);
}
});
Button increase = findViewById(R.id.increase);
increase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cardList.updateList(Card.newInstance("hello","world"));
Log.i("Array List Size After Click",String.valueOf(cardList.getListSize()));
}
});
}
}
有人可以教我如何在 Android 中使用 arraylist 屬性存盤自定義物件嗎?提前致謝!
uj5u.com熱心網友回復:
Fragments 不是serializable,這意味著它們不能分解為純資料,即JSON更不用說deserializable。
看看你的代碼,也沒有好的方法讓它作業。
您需要遵循關注點分離,Fragments 是美化的觀點。他們不應該在很大程度上持有資訊,所以他們不應該像他們一樣被傳遞。
您可以做的是擁有一個CardModel包含Card Fragment.
該CardModel可包含簡單的資料,你會發現JSON像Integer,String等...
AList<CardModel>可以deserialized來自JSON. 然后,當您在 中時,MainActivity您可以Card Fragment根據需要創建盡可能多的s 來表示List<CardModel>一個簡單的list.size()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/376859.html
