先来看看效果图:
第一天:学习android的历史,以及收发短信
发送短信以及打电话的过程中,我们要注意给权限SEND_SMS CALL_PHONE
同时有四种方法去监听按钮最好的最常用的一种是直接
第一步:实现接口
implements OnClickListener
第二步:按钮监听
Button but_add_data=(Button) findViewById(R.id.but_add_data);
but_add_data.setOnClickListener(this);
第三步:实现onclick方法
第二天:主要学习五大布局,数据存储,如文件存储,sharePres,XML用PULL解析
(1)
五大布局中常用到的就是:相对布局,线性布局,帧布局
文字居中用gravity,按钮居中用layout_gravity
线性布局中有一个权值的weight的问题
如下:
<a weightSum=3>
<b weight=1>
</b>
<c>
</c>
</a>
那么b就会占1/3,其余的给别人,b只参考他的父元素
如果:父节点没有指名weight,b就是剩余的空间都是他的
<a>
<b weight=1>
</b>
<c>
</c>
</a>
(2)
数据存储,文件处理
A:第一种直接存储于我们的/data/data/包名/文件名.xxx下,或者/data/data/包名/cache/文件名.xxx,/data/data/包名/files/文件名.xxx
下面都是为了说明怎样写入这些文件路径而总结的。
上面的三种都不要权限,因为这没有涉及到SD卡。
为了程序更健壮,对于第一种,我们不应该直接写包名:这样可以得到包名this.getPackageName()
对于第二种就更加简单了/data/data/包名/cache/文件名.xxx,直接用getCacheDir(),如果我们想要写到缓存中,我们应该
自己构造一下:String path=getCacheDir()+"/"+"file.xxx" 或者 File f=new File(getCacheDir(),"filename.xxx");
Activity还提供了getCacheDir()和getFilesDir()方法:
getCacheDir()方法用于获取/data/data/<package name>/cache目录
getFilesDir()方法用于获取/data/data/<package name>/files目录
如果我们想写到/data/data/包名/files/文件名.xxx,直接用下面代码
FileOutputStream outStream = this.openFileOutput("file.xxx", Context.MODE_PRIVATE);
outStream.write("asas".getBytes());
outStream.close();
openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,
如果文件不存在,Android会自动创建它。创建的文件保存在/data/data/<package name>/files目录
B:写入SD,首先我们要去设定权限
// 挂载和卸载SDCard
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
// 写入外存储设备权限
android.permission.WRITE_EXTERNAL_STORAGE
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录
File saveFile = new File(sdCardDir, “itcast.txt”);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("传智播客".getBytes());
outStream.close();
}
(3)
XML的解析与存储
解析不多说,就是用下面的一个自己写的文件工具类
package com.ouyang.studentmanage.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import android.util.Xml;
import com.ouyang.studentmanage.domain.Student;
/**
* 工具类
* @author Administrator
*
*/
public class FileUtils {
static String encode="utf-8";
/**
* 保存数据
* @param context 上下文,由他得到包名
* @param stu_list 学生列表
* @throws IOException
*/
public static void save(Context context, List<Student> stu_list) throws IOException {
//SD卡是否能用
String state=Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state))
{
//这个path在我们应用包下的,不需要权限
String path="/data/data/"+context.getPackageName()+"/stu_list.xml";
// //这个File是写入SD卡中的,需要权限
// File f=Environment.getExternalStorageDirectory();
// File file=new File(f,"stu_list.xml");
// Log.i("Tag",file.getAbsolutePath());
XmlSerializer serializer=Xml.newSerializer();
FileOutputStream os=new FileOutputStream(path);
serializer.setOutput(os, encode);
serializer.startDocument(encode,true);
serializer.startTag(null,"students");
if(stu_list.size()>0)
{
for(int i=0;i<stu_list.size();i++)
{
String stu_name=stu_list.get(i).getStu_name();
String stu_age=stu_list.get(i).getStu_age();
String stu_sex=stu_list.get(i).getStu_sex();
serializer.startTag(null,"student");
serializer.attribute(null,"id",String.valueOf(i));
serializer.startTag(null,"name");
serializer.text(stu_name);
serializer.endTag(null,"name");
serializer.startTag(null,"age");
serializer.text(stu_age);
serializer.endTag(null,"age");
serializer.startTag(null,"sex");
serializer.text(stu_age);
serializer.endTag(null,"sex");
serializer.endTag(null,"student");
}
}
serializer.endTag(null,"students");
serializer.endDocument();
}
}
/**
* 解析学生
* @param context 上下文
* @return
* @throws Exception 异常抛出
*/
public static List<Student> recover(Context context) throws Exception {
List<Student> stu_list=new ArrayList<Student>();
String path="/data/data/"+context.getPackageName()+"/stu_list.xml";
System.out.println(path);
XmlPullParser parser=Xml.newPullParser();
FileInputStream is=new FileInputStream(path);
parser.setInput(is, encode);
int enentType=parser.getEventType();
Student stu=null;
while(enentType!=XmlPullParser.END_DOCUMENT)
{
String tagname=parser.getName();
switch(enentType)
{
case XmlPullParser.START_TAG:
if("student".equals(tagname))
{
stu=new Student();
String id = parser.getAttributeValue(null,"id");
stu.setId(Integer.valueOf(id));
}else if("name".equals(tagname))
{
if(stu!=null)
{
stu.setStu_name(parser.nextText());
}
}else if("age".equals(tagname))
{
if(stu!=null)
{
stu.setStu_age(parser.nextText());
}
}else if("sex".equals(tagname))
{
if(stu!=null)
{
stu.setStu_sex(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
if("student".equals(tagname))
{
stu_list.add(stu);
}
break;
}
enentType=parser.next();
}
return stu_list;
}
}