Android list 泛型 用Gson 转json字符串 出现 java.lang.StackOverflowError异常解决

 不废话 第一次写博客,不知道怎么写,  直接进入主题

我来这最熟悉的代码

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initUI();
	}
	private void initUI() {
		save = (Button) findViewById(R.id.save);
		read = (Button) findViewById(R.id.read);
		textView = (TextView) findViewById(R.id.textview);
		save.setOnClickListener(this);
		read.setOnClickListener(this);
	}
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.save:
			initData();
			break;
		case R.id.read:
			break;
		}
	}
	private void initData() {
		// TODO Auto-generated method stub
		LinkedList<MyTrafficDetailsBin> detailsBins=new LinkedList<MyTrafficDetailsBin>();
		for (int i = 0; i < 20; i++) {
			MyTrafficDetailsBin bin=new MyTrafficDetailsBin(i, "名称:"+i, "时间:"+i, "appname:"+i);
			detailsBins.add(bin);
		}
		Gson gson=new Gson();
		String json = gson.toJson(detailsBins);
		Log.e("保存数据:", json);
	}


这样直接转的话会出现异常java.lang.StackOverflowError 堆栈溢出

 

于是我在网上找了很多答案也没有找到明确的处理方法,也查询了导致这个错误的真正原因,这里就不贴出来了,

后来查看了一些写博客比较火的人他们写的文章,还是不适合废话直接上解决方案吧

 

private void initData() {
		// TODO Auto-generated method stub
		LinkedList<MyTrafficDetailsBin> detailsBins=new LinkedList<MyTrafficDetailsBin>();
		for (int i = 0; i < 20; i++) {
			MyTrafficDetailsBin bin=new MyTrafficDetailsBin(i, "名称:"+i, "时间:"+i, "appname:"+i);
			detailsBins.add(bin);
		}
		Gson gson = new GsonBuilder()
		 .excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性  
		       .enableComplexMapKeySerialization() //
		        .serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")//   
		        .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//		   
    			.setPrettyPrinting() //对json结果格式化.  
		        .setVersion(1.0).  
		create();
		String json = gson.toJson(detailsBins);
		Log.e("保存数据:", json);
	}

 

请求注意了   你的 list里面的对象类 一定要@Expose注解属性,不然你的字段全都为null,  当然你不需要的字段就不要注解了,


 

读取保存的数据也是这样

 

private void initData() {
		// TODO Auto-generated method stub
		LinkedList<MyTrafficDetailsBin> detailsBins=new LinkedList<MyTrafficDetailsBin>();
		for (int i = 0; i < 20; i++) {
			MyTrafficDetailsBin bin=new MyTrafficDetailsBin(i, "名称:"+i, "时间:"+i, "appname:"+i);
			detailsBins.add(bin);
		}
		Gson gson = new GsonBuilder()
		 .excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性  
		       .enableComplexMapKeySerialization() //	
	        .serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")		  
      		.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//  
		       .setPrettyPrinting() //对json结果格式化.  
		        .setVersion(1.0).  
		create();
		String json = gson.toJson(detailsBins);
		Log.e("保存数据:", json);
		
		Type typeOfT=new TypeToken<LinkedList<MyTrafficDetailsBin>>(){}.getType();
		LinkedList<MyTrafficDetailsBin> bins=gson.fromJson(json, typeOfT);
		for (int i = 0; i < bins.size(); i++) {
			Log.e("显示数据appname:", bins.get(i).getAppname());
		}
	}

 

好吧就写到这里,  希望遇到这个问题能看懂我这篇文章,写的实在不好。

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值