不废话 第一次写博客,不知道怎么写, 直接进入主题
我来这最熟悉的代码
@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());
}
}
好吧就写到这里, 希望遇到这个问题能看懂我这篇文章,写的实在不好。