美文网首页
Map转Serializable的问题

Map转Serializable的问题

作者: 晓风残月酒醒 | 来源:发表于2019-04-19 10:58 被阅读0次

Map本身只是一个接口,它的子类Hashtable,HashMap,LinkedHashMap,TreeMap都已经实现了Serializable接口(ArrayMap没有实现Serializable接口),但是在一些特殊的地方Map的value是object,却需要执行Serializable操作,此时就需要做一些特殊的处理。如果全部使用字符串会导致一些JSONObject数据最外层多两个引号

下面是发送数据的页面

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.mouse.temporarydemo.bean.PersonBean;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {
    private Button btnMain;
    private HashMap<String, Object> stringArrayMap;
    private Context context;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = MainActivity.this;
        initView();
        initData();
        initListener();
    }

    private void initView() {
        btnMain = this.findViewById(R.id.btnMain);
    }

    private void initData() {
        stringArrayMap = new HashMap<>();
        stringArrayMap.put("1_3_8", "");
        stringArrayMap.put("1_4_4", "A");
        stringArrayMap.put("1_3_3", "B");
        stringArrayMap.put("1_1_1", "C,D");

        PersonBean personBean = new PersonBean("1111111111111", "");
        stringArrayMap.put("1_3_8", personBean);

        PersonBean personBean1 = new PersonBean();
        personBean1.setContent("22222222222");
        String OSSFileName = "__vipserver/img/"
                + new SimpleDateFormat("yyyyMM").format(new Date()) + "/"
                + "18811242229_"  //学员登录手机号, 嵌入项目的时候需要改成系统存的值;
                + String.valueOf(System.currentTimeMillis()) + "_"
                + String.valueOf((int) ((Math.random() * 9 + 1) * 100000))
                + ".jpg";  // 格式化文件名称.
        personBean1.setPic(OSSFileName);
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("content", "222222222");
            jsonObject.put("pic", OSSFileName);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        stringArrayMap.put("1_3_9", jsonObject);
        Log.e("stringArrayMap", stringArrayMap.toString());
    }

    private void initListener() {
        btnMain.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, SecondActivity.class);
                // 先转化为JSONObject,然后转化为String
                JSONObject jsonObject1 = new JSONObject(stringArrayMap);
                intent.putExtra("json", jsonObject1.toString());
                startActivity(intent);
            }
        });
    }
}

下面是接收数据的页面

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class SecondActivity extends AppCompatActivity {
    private ArrayMap<String, Object> stringArrayMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        initData();
    }

    private void initData() {
        Intent intent = getIntent();
        String json = intent.getStringExtra("json");
        Log.e("json", json);
        if (!TextUtils.isEmpty(json)) {
            Gson gson = new Gson();
            stringArrayMap = gson.fromJson(json, new TypeToken<ArrayMap<String, Object>>() {}.getType());
        }
    }
}

相关文章

网友评论

      本文标题:Map转Serializable的问题

      本文链接:https://www.haomeiwen.com/subject/lstqgqtx.html