安卓小日记练习(9)序列化对象List,通过文件读取在活动间传递数据

我们新建了一个活动,界面是list,有一个下栏(下栏先不管他),我们先来看list。

点击主界面右下方的横条之后,进入这个活动,并传递数据。

以上是点击主界面之后,进入的活动的界面,list的数据是从文件里面取得的(不是在这个活动里手动添加的)

思路:设置主界面右下方小横条的点击事件,启动活动,并且把list(里面的对象是序列化的(序列化就是实现序列化的接口))保存到文件,然后另一个活动从文件中直接取出list,然后通过适配器来给list的item传入数据。

关于文件读取部分:参考上一篇博文。折腾FILE流的方法一天,也是遇到无数的异常,小结两点:一个是注意方法的选择,一个是注意只要文件名,不要路径!

序列化就是实现接口:

public class Day implements Serializable{
	private String day;
	private String week;
	private String detail;
	
	private static final long serialVersionUID = -3450064362986273896L; 
	
	public Day(String week, String day, String detail)
	{
		this.day = day;
		this.week = week;
		this.detail = detail;
	}/*
	public Day(String detail)
	{
		this.detail = detail;
	}*/
	
	public String getDay()
	{
		return day;
	}
	
	public String getWeek()
	{
		return week;
	}
	
	public String getDetail()
	{
		return detail;
	}
	
	public void setWeek(String week)
	{
		this.week = week;
	}
	public void setDay(String day)
	{
		this.day = day;
	}
	public void setDetail()
	{
		this.detail = detail;
	}
}

新活动的布局,listitem的子布局,适配器,都如出一辙,就不贴代码了。

注意看MainActivity 和 MonthActivity里面的关键部分:

MainActivity:

//读写文件
        public void save(ArrayList list)//存数据
    	{
    		FileOutputStream out = null;
    		try
    		{
    			out = openFileOutput("foo",Context.MODE_PRIVATE);
    			//writer = new BufferedWriter(new OutputStreamWriter(out));
    			//writer.write(day);
    			ObjectOutputStream oos = new ObjectOutputStream(out);
    			oos.writeObject(list);
    			
    			oos.close();
    			out.close();
    		}
    		catch(IOException e)
    		{
    			e.printStackTrace();
    		}
    	}

    	

启动活动,并且存入文件:

iv1 = (ImageView)findViewById(R.id.image_view8);
			 iv1.setOnClickListener(new View.OnClickListener()    //启动当月日记浏览的活动
		        {
		        	@Override
		        	public void onClick(View v)
		        	{
		        		Intent intent = new Intent(MainActivity.this,MonthActivity.class);
		        		startActivity(intent);
		        		save(daylist);
		        	}
		        });

再来看启动的MonthActivity:

public ArrayList load()  //取数据
	{
		ArrayList list = new ArrayList();
		FileInputStream in = null;
		//BufferedReader reader = null;
		//StringBuilder content = new StringBuilder();
		try{
			in = openFileInput("foo");
			ObjectInputStream ois = new ObjectInputStream(in);
			list = (ArrayList) ois.readObject();
			ois.close();
			in.close();
		}
		 catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}

			return list;
	}

从文件中读取数据并应用:

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_month);
           monthlist = load();
        //initDay();
        MonthAdapter adapter = new MonthAdapter(MonthActivity.this,R.layout.month_item,monthlist);
        ListView listView = (ListView)findViewById(R.id.list_view_);
        listView.setAdapter(adapter);
    }

另:除了文件系列的异常,空指针异常也遇到不少了,多半是id设置重复,应用的id不正确,应该添加的属性,控件名等等写错,总而言之,我们每次实现一个功能都应该运行程序,这样就可以确定范围,我们就在确定的范围内搜索排除错误(控制变量法),总的来说空指针异常是可以通过仔细看代码(肉眼观察)发现并解决的。还是编码的很多习惯不好(比如命名),都说code习惯风格好的人运气都不会太差,我改。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值