Android Как пройти LinkedHashMap между действиями?

Я пытаюсь передать 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 между действиями?

Ответы

Ответ 1

Попробуйте GSON для изменения:)

Загрузите gson.jar из этого ссылка

И добавьте файл gson-2.2.2.jar в свой проект.
Теперь передайте свой LinkedHashMap другому действию с помощью GSON

как это (измените этот ниже код в соответствии с вашими потребностями):

MainActivity:

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) скопируйте gson-2.2.2.jar из загруженной папки "google-gson-2.2.2".
2) вставьте его в папку вашего ресурса проекта.
3) теперь перейдите к пути создания проекта, щелкнув правой кнопкой мыши на своем проекте > Путь сборки > Настроить путь сборки.
4) Он откроет один диалог, выберите путь java build из правого меню и перейдите в библиотечный тег, затем нажмите кнопку "Добавить банки...", как вы можете видеть на следующем изображении
, он откроет еще один диалог для добавить банку. здесь выберите gson-2.2.2.jar, который мы добавили в папку активов проекта (шаг 2).
Он добавит jar в ваш проект (я уже добавил его в свой проект, как вы можете видеть ниже) бр / " >
enter image description here 5) Теперь выберите "Заказ и экспорт" и выберите свой gson-2.2.2.jar(см. Рисунок ниже).
enter image description here 6) Нажмите OK, и теперь вы можете использовать GSON в своем проекте

Ответ 3

Edit:

На основе ссылки, предоставленной 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");

Ответ 4

Перейдите в массив байтов, затем десериализуйте и добавьте в LinkedHashMap в целевую активность.