技巧——gson之过滤你不想要的字段

接上一篇,虽然工具类写好了,组长问了我一个问题,就是如果我里面的有些字段不想要的话,能不能解决,我当时说好像可以,因为我之前看到过,接下来,我的任务就是去找这方面相关的资料,虽然网上也有,但是还是需要自己理解跟做修改的。像里面的概念性东西,你们自己百度呢,对于你学习来说是很重要的!

效果图:

技巧——gson之过滤你不想要的字段_第1张图片


1、先上实体类:

package com.example.bamboo_tojson.bean2;

import java.util.List;

public class UserEntity {
	private String name;
	private String pwd;
	private int age;
	private List list;
	
	public List getList() {
		return list;
	}
	public void setList(List list) {
		this.list = list;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}


2、.java里面的代码

package com.example.bamboo_tojson;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import com.example.bamboo_tojson.bean2.UserEntity;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Test2Activity extends Activity {
	private Gson gson;
	private UserEntity ue;
	private TextView tv_result;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_test2);
		tv_result = (TextView) this.findViewById(R.id.tv_result);
		ue = new UserEntity();
		ue.setAge(20);
		ue.setName("bamboo");
		ue.setPwd("00000");
		List list = new ArrayList();
		list.add("1");
		list.add("2");
		ue.setList(list);

		tv_result.setText(this.getCacheDir().getAbsolutePath().toString());
	}

	public void btnClick(View view) {
		/** 需要过滤的字段 */
		String[] options = null;

		switch (view.getId()) {
		case R.id.btn_test2:
			break;
		case R.id.btn_gl1:
			options = new String[] { "name" };
			break;
		case R.id.btn_gl2:
			options = new String[] { "list" };
			break;
		case R.id.btn_gl3:
			options = new String[] { "list", "name" };
			break;
		}
		/** 需要过滤字段的话 创建gson的话 就不是new 出来的 */
		ExclusionStrategy excludeStrategy = new SetterExclusionStrategy(options);
		gson = new GsonBuilder().setExclusionStrategies(excludeStrategy)
				.create();
		String result = gson.toJson(ue);
		tv_result.setText(result);
	}

	/**
	 * 过滤帮助类
	 * 
	 * @author bamboo
	 * 
	 */
	private static class SetterExclusionStrategy implements ExclusionStrategy {
		private String[] fields;

		public SetterExclusionStrategy(String[] fields) {
			this.fields = fields;

		}

		@Override
		public boolean shouldSkipClass(Class arg0) {
			return false;
		}

		/**
		 * 过滤字段的方法
		 */
		@Override
		public boolean shouldSkipField(FieldAttributes f) {
			if (fields != null) {
				for (String name : fields) {
					if (f.getName().equals(name)) {
						/** true 代表此字段要过滤 */
						return true;
					}
				}
			}
			return false;
		}
	}

}

我在学习这个过程中关键的步骤我已经打了注释,希望对你们有帮助!大家一起学习奋斗呢


最后奉上一句话:

喜欢主动买单的人,不是因为钱太多,而是把友情看的比金钱重要。 合作时愿意让利的人,不是因为笨,而是知道分享。 工作时愿意主动多干的人,不是因为傻,而是懂得责任。 吵架后先道歉的人,不是因为错,而是懂得珍惜。 愿意帮你的人,不是欠你什么,而是把你当真朋友。


上一次工作的离职,对我的影响真的有点,就像上面做的,我做的多,不是因为我想表现,我只是想跟同事当作真的好哥们,任务大家一起分担下,社会却不是这样!现在的组长,技术上面的问题大家一起讨论,觉得很开心,而之前的那个6年的组长,他问你问题,你跟他说了,任务就给你,而且还说多做少说!不好意思简单的抱怨下哈!





你可能感兴趣的:(android)