Как отправить данные HashMap из одного действия в другое? - PullRequest
0 голосов
/ 14 октября 2019

Я устанавливаю результатActivty. Я должен вернуть результат так, что-то, что я делаю, как

Я пытался, но здесь я получаю только ключи не значение

  Intent i = new Intent(this, CustImageSignatureUploadFragment.class);
        i.putExtra("uniqueBiometric", uniqueBiometricList);
        setResult(RESULT_OK, i);
        finish();

    else if (requestCode == File_Key.BIOMETRICUNIQUE) {
                    uniqueBiometricList = (HashMap<String, 
   CommKycUpload>)data.getSerializableExtra("uniqueBiometric");


   CommKycUpload is my pojo which is implementing  parcelable

Ответы [ 3 ]

0 голосов
/ 14 октября 2019
For example, when sending the intent:

HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("key", "value");
Intent intent = new Intent(this, MyOtherActivity.class);
intent.putExtra("map", hashMap);
startActivity(intent);
And then in the receiving Activity:

protected void onCreate(Bundle bundle) {
super.onCreate(savedInstanceState);

Intent intent = getIntent();
HashMap<String, String> hashMap = (HashMap<String, String>)intent.getSerializableExtra("map");
Log.v("HashMapTest", hashMap.get("key"));
}
0 голосов
/ 14 октября 2019

Hashmap расширяется Serializable, поэтому, если ваш POJO также расширяется Serializable, вы можете просто передать Hashmap<String,Object> другому действию через намерение

Hashmap<String,Object> data = new Hashmap<String,Object>();
Intent intent = new Intent(Activity.this, Activity2.class);
intent.putSerializableExtra("data", data)
0 голосов
/ 14 октября 2019

Вы можете попробовать это для заполнения намерения:

val map = HashMap<String,YourObject>()

    val intent = Intent()
    intent.putExtra("SIZE", map.size)

    for (k in 0..map.size) {
        intent.putExtra("KEY"+k, map.keys.toList()[k])
        intent.putExtra("VALUE"+k, map[map.keys.toList()[k]])
    }

И это для чтения назад:

val mapReceived = hashMapOf<String,YourObject>()

    val intReceived = getIntent()
    if (intReceived.hasExtra("SIZE")) {
        val size = intReceived.getIntExtra("SIZE", 0)

        for (k in 0..size) {
            mapReceived[intReceived.getStringExtra("KEY"+k)] = intReceived.getParcelableExtra("VALUE"+k)
        }
    }

Может быть не самый умный, но, вероятно, должно работать

На Java:

Запись:

HashMap<String, ActivityBase> map = new HashMap<String,ActivityBase>();

    Intent intent = new Intent();
    intent.putExtra("SIZE", map.size());

    for (int k=0; k<=map.size(); k++){
        intent.putExtra("KEY"+k, (String)map.keySet().toArray()[k]);
        intent.putExtra("VALUE"+k, (ActivityBase) map.get(map.values().toArray()[k]));
    }

Чтение:

HashMap<String, ActivityBase> mapReceived = new HashMap<String,ActivityBase>();

    Intent intReceived = getIntent();
    if (intReceived.hasExtra("SIZE")) {
        int size = intReceived.getIntExtra("SIZE", 0);

        for (int k=0; k<=map.size(); k++){
            mapReceived.put(intReceived.getStringExtra("KEY"+k), intReceived.getParcelableExtra("VALUE"+k));
        }
    }
...