[英]How to pass data between activities on Android with SharedPreferences?
[英]Android How to Pass LinkedHashMap Between Activities?
我試圖在活動之間傳遞LinkedHashMap,我的代碼是這樣的
活動A.
LinkedHashMap mLinkedHashMap = new LinkedHashMap<String, Object>();
// setting data in map
Bundle bundle = new Bundle();
bundle.putSerializable("OBJECTS_LINKED_HASHMAP", mLinkedHashMap);
Intent intent = new Intent(this, ActivityB.class);
intent.putExtras(bundle);
startActivity(intent);
在Activity中,當我收到bundle對象時,我收到“Class cast exception”錯誤消息
活動B.
Bundle bundle = this.getIntent().getExtras();
LinkedHashMap mLinkedHashMap = new LinkedHashMap<String, Object>();
mLinkedHashMap = (LinkedHashMap<String, Object>) bundle.getSerializable("OBJECTS_LINKED_HASHMAP");
獲得類強制轉換異常
ClassCastException: java.util.HashMap cannot be cast to LinkedHashMap
我檢查了文檔LinkedHashMap也實現了Serializable接口。
我正在使用LinkedHashMap,因為我想維護對象順序,他們按順序插入我想要的方式。
如何在活動之間傳遞LinkedHashMap?
嘗試GSON
進行更改:)
從此鏈接下載gson.jar
並在您的項目中添加gson-2.2.2.jar文件。
現在使用GSON將LinkedHashMap傳遞給另一個活動
像這樣(根據你的需要修改下面的代碼):
主要活動:::
public class MainActivity extends Activity {
ObjectClass obj=new ObjectClass();
LinkedHashMap<String, ObjectClass> mLinkedHashMap = new LinkedHashMap<String, ObjectClass>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
obj.id=1;
obj.name="hello";
mLinkedHashMap.put("test", obj);
Gson gson = new Gson();
String list = gson.toJson(mLinkedHashMap);
Intent intent = new Intent(this, secondActivity.class);
intent.putExtra("list", list);
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
secondActivity :::
public class secondActivity extends Activity {
LinkedHashMap<String, ObjectClass> mLinkedHashMap = new LinkedHashMap<String, ObjectClass>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String str= getIntent().getStringExtra("list");
Gson gson = new Gson();
Type entityType = new TypeToken< LinkedHashMap<String, ObjectClass>>(){}.getType();
mLinkedHashMap = gson.fromJson(str, entityType);
ObjectClass obj = mLinkedHashMap.get("test");
Log.i("list", ""+obj.id);
}
}
為我工作。 希望這會有所幫助。
這是我的對象類供參考。
public class ObjectClass {
public int id;
public String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
如何添加gson-2.2.2.jar文件。
1)從下載的文件夾“google-gson-2.2.2”復制你的gson-2.2.2.jar。
2)將其粘貼到項目的資產文件夾中。
3)現在通過右鍵單擊項目>構建路徑>配置構建路徑轉到項目構建路徑。
4)它將打開一個對話框,從右側菜單中選擇java build path然后轉到library tag
點擊“Add Jars ...”按鈕,如下圖所示
它將打開另一個添加jar的對話框。 這里選擇我們在項目資產文件夾中添加的gson-2.2.2.jar(步驟2)。
它會將jar添加到你的項目中(我已將它添加到我的項目中,如下圖所示)
5)現在選擇Order and Export標簽並選擇你的gson-2.2.2.jar(見下圖)。
6)按OK,現在您可以在項目中使用GSON
編輯:
根據Manish Android提供的鏈接,解決方案是
if (getIntent().getSerializableExtra("OBJECTS_LINKED_HASHMAP") != null)
HashMap<?, ?> user_info = (HashMap<?, ?>) getIntent().getSerializableExtra("OBJECTS_LINKED_HASHMAP");
LinkedHashMap<String, Object> userdata= (LinkedHashMap<String, Object>) user_info
你需要得到這樣的
if (getIntent().getSerializableExtra("OBJECTS_LINKED_HASHMAP") != null)
LinkedHashMap<String, Object> user_info = (LinkedHashMap<String, Object>) getIntent().getSerializableExtra("OBJECTS_LINKED_HASHMAP");
傳遞為字節數組,然后反序列化並LinkedHashMap
為目標Activity中的LinkedHashMap
。
我的方法如下:
CustomObject必須實現Parcelable。 要設置捆綁包:
LinkedHashMap<Integer, List<CustomObject>> mItems
Bundle bundle = new Bundle();
bundle.putInt("ItemsSize",mItems.size());
int mapIndex=0;
for(Map.Entry<Integer, List<CustomObject>> entry : mItems.entrySet()) {
int key = entry.getKey();
bundle.putInt("Key"+mapIndex, key);
bundle.putParcelableArrayList("Value"+mapIndex, mItems.get(key));
mapIndex++;
}
要獲得捆綁:
for(int i=0;i<bundle.getInt("ItemsSize");i++) {
int key = bundle.getInt("Key"+i);
ArrayList<CustomObject> value = bundle.getParcelableArrayList("Value"+i);
mItems.put(key, value);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.