主页是package net.oschina.app.ui下面的Main,

 从AppStart跳转过来的,大部分的布局和动作都在这里显示。

这里说明下登陆原理,一般我们web端都会用cookie或者session。来指定是否登陆,但是在安卓端,并没有

这个东西。oschina用的是模拟web登陆,用一个文件来保存状态。大概就是用这个文本文件保存一些参数。

我们运行起来在模拟器里面查看,再解析。运行模拟器并且run起oschina程序。

然后我们打开DDMS,找到File Explorer,找到data/data/net.oschina.app,你会发现已经生成了几个文件夹,

有没有看到一个app_config这个文件夹下面的config,我将这个文件导出到桌面上,看看这个文件是用来干什么的。

安卓 repositories 国内cdn_java

打开之后大概是这些东西,你会发现是一个key value 键值对的格式

#Wed Feb 04 13:11:52 GMT 2015
save_image_path=/storage/emulated/0/OSChina/
APP_UNIQUEID=53235c40-9a47-4ec7-9793-ca758dd90df9

明显我们可以看出 这个其实就是java中的Properties格式的,那我们再来看看是怎么用Properties对这个文件进行读写。

我们这里转到AppConfig.java 到这里

public Properties get() {
		FileInputStream fis = null;
		Properties props = new Properties();
		try {
			// 读取files目录下的config
			// fis = activity.openFileInput(APP_CONFIG);

			// 读取app_config目录下的config
			File dirConf = mContext.getDir(APP_CONFIG, Context.MODE_PRIVATE);
			fis = new FileInputStream(dirConf.getPath() + File.separator
					+ APP_CONFIG);

			props.load(fis);
		} catch (Exception e) {
		} finally {
			try {
				fis.close();
			} catch (Exception e) {
			}
		}
		return props;
	}

这个函数是读取config文件 然后转化为一个Properties,这里我们可以把Properties理解为一个键值对的数组。

private void setProps(Properties p) {
		FileOutputStream fos = null;
		try {
			// 把config建在files目录下
			// fos = activity.openFileOutput(APP_CONFIG, Context.MODE_PRIVATE);

			// 把config建在(自定义)app_config的目录下
			File dirConf = mContext.getDir(APP_CONFIG, Context.MODE_PRIVATE);
			File conf = new File(dirConf, APP_CONFIG);
			fos = new FileOutputStream(conf);

			p.store(fos, null);
			fos.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				fos.close();
			} catch (Exception e) {
			}
		}
	}



这个函数是用来把重写config文件的。就是通过修改Properties里面的值,来改变config。

所以这里我们可以发现这个config文件中我们也可以保存很多东西,譬如用户的账号,甚至cookie。

那我接下来再试着登陆下试试看,我登陆后config发现变化了

#Wed Feb 04 13:36:31 GMT 2015
//cookie
cookie=oscid\=fn38%2FCq83ZZd%2FF58iDFf3W6LPmx1BMvsPW%2BKO7PRw%2FMx%2BzpjRcK%2BFEgWJ%2BNW5ps8g1kMViGgI%2FJqGjsKB%2F%2FSKh5HXL5lal9sH6n3Cruda9MN9jMiWh4kX9E%2F3Rjp3KJj;
//保存图片地址
save_image_path=/storage/emulated/0/OSChina/
//下面一些用户的信息
user.score=0
user.name=\u9ad8\u7ea7\u6253\u5b57\u5458
user.account=pjhxl@qq.com
user.uid=1448038
user.followers=0
user.face=1448038_100.jpg?t\=1391868643000
user.location=\u6d59\u6c5f \u676d\u5dde
user.isRememberMe=true
APP_UNIQUEID=53235c40-9a47-4ec7-9793-ca758dd90df9
user.pwd=B4E8E37ACFF16FF5260DB582E203B7E7
user.fans=0

这里发现保存了一些登陆者的信息,看到有一个cookie,其他已经写在代码里面。

所以这个config是保存登陆者信息,就是可以通过修改这个文件来判断是非登陆,如果这里有信息应该是登陆,然后可以取出一些信息。