一.天气预报应用
1.spinner的应用
citySpinner=(Spinner)findViewById(R.id.citySpinner);
//设置Spinner的适配器来规定其内容及格式 Context Spinner中每一项的布局 数据源,这里是数组
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,ConstData.cities);
//设置Spinner的总体布局
adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
citySpinner.setAdapter(adapter);
2.解析XML
通过向google发送一个请求,出现一个关于所选城市天气状况的XML,获得,解析并设置
//获得XML文件的内容,属于IO部分 获得对应URL的输入流
InputStreamReader isr=new InputStreamReader(url.openStream(),"GBK");
InputSource is=new InputSource(isr); //这一步是为了后面SAX解析
JAVA基础知识:怎么样把inputStream转换为String
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
sb.append(line + "\n");
System.out.print(sb.toString());
//三步得到XMLReader对象
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
XMLReader xr=sp.getXMLReader();
//设置xr对象的ContentHandler MyContentHandler继承自DefaultHandler,其中规定了解析对应XML文件的算法
xr.setContentHandler(new MyContentHandler());
xr.parse(is);
//规定XML处理规则的Handler
public class MyContentHandler extends DefaultHandler{
public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {
//localName代表标签的名字,attributes代表标签的属性 顺带一说字符串的比较用localName.equals("condition")
}
public void endElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {
}
public void startDocument() throws SAXException {
}
public void endDocument() throws SAXException {
}
}
3.动态更新布局
//这样的布局可以直接用在main.xml布局文件中,标签为<zxc.android.CityWeather.SingleWeatherInfo>
总结:薄弱部分在于JAVA IO方面缺乏了解。
//File构造函数
File(String Path) File(String Path,String fileName) File(File dirObj,String fileName) File(URI uriObj)
File file=new File(/sdcard/data/);
System.out.print(file.getName());
//还有比较重要的方法 file.getPath() file.getAbsolutePath() file.getParent() file.exists() file.canWrite() file.canRead()
//file.isFile() file.isDirectory() file.lastModified() 文件大小file.length() file.renameTo(File new Name); file.delete()
//如果一个File确定是文件夹 可以用file.listFiles()来返回其下的文件对象数组 file.list()返回储存文件名的数组
//如果要设置listFiles所返回的文件类型 用一个类实现FilenameFilter对象,重写boolean accept()方法 调用时候file.list(new Filter("txt"));
//创建文件夹file.mkdirs(); 路径中所有不存在的文件夹都会被创建
JAVA IO 字节流 字符流补习:
字节流InputStream OutputStream
在与字节和其他二进制对象打交道时用字节流
1.FileInputStream可以从文件读取字节
//FileInputStream(String path) FileInputStream(File fileObj)
FileInputStream fileInputStream=new FileInputStream("1.txt");
fileInputStream.read(n)来读取n个字节 fileInputStream.available()来显示剩余可读字节数
FileOutputStream可以向文件写入字节
//FileOutputStream(String path) FileOutputStream(File fileObj) FileOutputStream(String path,boolean append) //FileOutputStream(String,path,boolean append) 如果append为true,则文件以添加形式打开
FileOutputStream fileOutputStream=new FileOutputStream("1.txt"); //这个1.txt现在可能还不存在,在文件开始写的时候会创建
byte buf[]="HelloWorld";
for(int i=0;i<buf.size();i++)
fileOutputStream.write(buf[i]); //一次只能写入一个字节,若要一次输入多个字节,可以用ByteArrayOutputStream
2.BufferedInputStream/BufferedOutputStream缓冲流
一个缓冲流允许Java一次对多个字节执行I/O操作,提高了性能
//BufferedInputStream(InputStream inputStream) BufferedInputStream(InputStream inputStream,int bufSize)
BufferedInputStream可以把InputStream包装成缓冲流,从而提高性能
字符流Reader Writer
在与字符,字符串打交道的时候使用字符流,因为字节流不能直接处理Unicode字符
Reader,Writer //其read(),write()方法读取下一个字符
CharArrayReader,CharArrayWriter
BufferedReader,BufferedWriter //使用缓冲来增强功能,bufferedReader.readLine()非常好用