安卓开发(2)

主要内容:布局,测试,文件读写,xml文件序列化与pull解析

布局:(注意单元的概念)

  1. 相对布局(RelativeLayout):就是各个View的相对位置,比较常用
  2. 线性布局(LinearLayout):线性布局包括水平(horizontal)和竖直("vertical")两种,很方便的布局,用处很广。
  3. 表格布局(tableLayout):每一行都用一个tableRow圈起来
  4. 绝对布局(AbsoluteLayout):每一个View指定具体的位置,一般不用。
  5. 帧布局(FrameLayout):每一个单元占据单独的一层,同时显示在界面上,可以设置每一帧的显示与否;
  6. 网格布局:还没学;

测试的概念:

logcat(日志):安卓系统的控制台,可以通过他了解到系统的运行信息。

可以自己在代码中插入日志,如插入Log.i(String tag,Stirng msg);

  1. verbose  提示
  2. debug    调试
  3. info    信息
  4. warn     警告
  5. error 错误

白盒测试:
知道程序源代码.

根据测试的粒度分为不同的类型
单元测试 unit test
功能测试 function test
集成测试 intergation test
冒烟测试 smoke test
压力测试 pressure test

junit测试框架:第一,需要创建一个类继承androidTestcase,实现测试。第二,需要在Androidmainfest.xml文件中添加以下语句

在mainfest中添加

1 <instrumentation
2         android:name="android.test.InstrumentationTestRunner"
3         android:targetPackage="com.first.junit" />

其中第二行是目标包名;

在application中添加

<uses-library android:name="android.test.runner" />

最后选择程序运行代码,如果logcat出现绿条说明运行正常。

文件的存取:

保存数据到rom文件中

1 public static void saveToRom(Context context, String name , String password) throws Exception{
2         //File file = new File("/data/data/com.itheima.login/files/pwd.txt");
3         File file = new File(context.getFilesDir(),"pwd.txt");
4         FileOutputStream fos = new FileOutputStream(file);
5         String txt = name+":"+password;
6         fos.write(txt.getBytes());
7         fos.flush();
8         fos.close();
9     }

Context:上下文,提供程序所需要的环境。

context.getFilesDir():Returns the absolute path to the directory on the filesystem where files created with openFileOutput(String, int) are stored.一般是在data/data/包名/files/

Environment.getExternalStorageDirectory():获取sd卡所在目录

应用程序保存到shareperference

 1 /**
 2      * 保存应用程序数据 到sharedpreference
 3      * @param context 上下文
 4      * @param name 姓名
 5      * @param password 密码
 6      */
 7     public static void saveTOSP (Context context, String name, String password){
 8         //获取系统的一个sharedpreference文件  名字叫 sp
 9         SharedPreferences sp = context.getSharedPreferences("sp", Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
10         //创建一个编辑器 可以编辑 sp
11         Editor editor = sp.edit();
12         editor.putString("name", name);
13         editor.putString("password", password);
14         editor.putBoolean("boolean", false);
15         editor.putInt("int", 8888);
16         editor.putFloat("float",3.14159f);
17         //注意:调用 commit 提交 数据到文件.
18         editor.commit();
19         //editor.clear();
20     }
21
22     /**
23      * 获取系统sharepreference里面的数据
24      * @param context
25      * @return
26      */
27     public static Map<String,String> readFromSP(Context context){
28         Map<String,String> map = new HashMap<String, String>();
29         SharedPreferences sp = context.getSharedPreferences("sp", Context.MODE_PRIVATE);
30         String name = sp.getString("name", "defaultname");
31         String password = sp.getString("password", "password");
32         map.put("name", name);
33         map.put("password", password);
34         return map;
35     }
36     

文件的访问权限

MODE_PRIVATE,MODE_APPEND,MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE;

  1 package com.itheima.testmode;
  2
  3 import java.io.File;
  4 import java.io.FileNotFoundException;
  5 import java.io.FileOutputStream;
  6 import java.io.IOException;
  7
  8 import android.app.Activity;
  9 import android.os.Bundle;
 10 import android.os.Environment;
 11 import android.view.View;
 12 import android.widget.RadioGroup;
 13
 14 public class MainActivity extends Activity {
 15     private RadioGroup rg;
 16
 17     @Override
 18     protected void onCreate(Bundle savedInstanceState) {
 19         super.onCreate(savedInstanceState);
 20         setContentView(R.layout.activity_main);
 21         rg = (RadioGroup) findViewById(R.id.rg);
 22     }
 23
 24     public void generateFile(View view) {
 25         switch (rg.getCheckedRadioButtonId()) {
 26         case R.id.rb_private:
 27             savePrivate();
 28             break;
 29         case R.id.rb_readable:
 30             saveReadble();
 31             break;
 32         case R.id.rb_writeable:
 33             savewriteable();
 34             break;
 35         case R.id.rb_all:
 36             saveAll();
 37             break;
 38         case R.id.rb_sd:
 39             saveSD();
 40             break;
 41
 42         case R.id.rb_append:
 43             saveAppend();
 44             break;
 45         }
 46
 47     }
 48
 49     private void saveAppend() {
 50         try {
 51             FileOutputStream fos = this.openFileOutput("append.txt",
 52                     MODE_APPEND);
 53             fos.write("我是追加模式生成的文件".getBytes());
 54             fos.close();
 55         } catch (Exception e) {
 56             e.printStackTrace();
 57         }
 58
 59     }
 60
 61     private void saveSD() {
 62         try {
 63             File file = new File(Environment.getExternalStorageDirectory(),
 64                     "sd.txt");
 65             FileOutputStream fos = new FileOutputStream(file);
 66             fos.write("我是sd卡的文件".getBytes());
 67             fos.close();
 68         } catch (FileNotFoundException e) {
 69             // TODO Auto-generated catch block
 70             e.printStackTrace();
 71         } catch (IOException e) {
 72             // TODO Auto-generated catch block
 73             e.printStackTrace();
 74         }
 75
 76     }
 77
 78     private void saveAll() {
 79         try {
 80             FileOutputStream fos = this.openFileOutput("all.txt",
 81                     MODE_WORLD_WRITEABLE | MODE_WORLD_READABLE);
 82             fos.write("我是全局可读可写文件".getBytes());
 83             fos.close();
 84         } catch (Exception e) {
 85             e.printStackTrace();
 86         }
 87
 88     }
 89
 90     private void savewriteable() {
 91         try {
 92             FileOutputStream fos = this.openFileOutput("writeable.txt",
 93                     MODE_WORLD_WRITEABLE);
 94             fos.write("我是全局可写文件".getBytes());
 95             fos.close();
 96         } catch (Exception e) {
 97             e.printStackTrace();
 98         }
 99
100     }
101
102     private void saveReadble() {
103         try {
104             FileOutputStream fos = this.openFileOutput("readable.txt",
105                     MODE_WORLD_READABLE);
106             fos.write("我是全局可读的文件".getBytes());
107             fos.close();
108         } catch (Exception e) {
109             e.printStackTrace();
110         }
111
112     }
113
114     private void savePrivate() {
115         // File file = new File(this.getFilesDir(),"1.txt");
116         // FileOutputStream
117         try {
118             FileOutputStream fos = this.openFileOutput("private.txt",
119                     MODE_PRIVATE);
120             fos.write("我是私有的文件".getBytes());
121             fos.close();
122         } catch (Exception e) {
123             e.printStackTrace();
124         }
125
126     }
127     public void writeappend(View view){
128
129         try {
130             FileOutputStream fos = this.openFileOutput("append.txt",
131                     MODE_APPEND);
132             fos.write(".... 我是新添加到的内容".getBytes());
133             fos.close();
134         } catch (Exception e) {
135             e.printStackTrace();
136         }
137
138     }
139
140     public void writecache(View view){
141         try {
142             File file = new File(this.getCacheDir(),"temp.txt");
143             FileOutputStream fos = new FileOutputStream(file);
144             fos.write("我是缓存".getBytes());
145             fos.close();
146         } catch (FileNotFoundException e) {
147             // TODO Auto-generated catch block
148             e.printStackTrace();
149         } catch (IOException e) {
150             // TODO Auto-generated catch block
151             e.printStackTrace();
152         }
153     }
154 }

xml序列化:

1 //1.获取到xml的序列号器
2         XmlSerializer serializer = Xml.newSerializer();
3         //2.序列化器的初始化
4         serializer.setOutput(fos, "utf-8"); //文件的编码方式 utf-8
5         //3.创建xml文件
6         serializer.startDocument("utf-8", true);

pull解析:

 1 public static List<Weather> getWeather(InputStream is) throws Exception {
 2         // 解析 天气的xml文件.
 3         // 1.获取到一个xml文件的解析器.
 4         XmlPullParser parser = Xml.newPullParser();
 5         // 2.初始化解析器.
 6         parser.setInput(is, "utf-8");
 7         // 3.解析xml文件.
 8         // 得到当前解析条目的节点类型.
 9         int eventType = parser.getEventType(); // 第一次被调用的时候 定位在xml开头
10         List<Weather> weatherInfos = null;
11         Weather weatherInfo = null;
12         while (eventType != XmlPullParser.END_DOCUMENT) {// 需要 不停的让 解析器解析下一个节点
13             switch (eventType) {
14             case XmlPullParser.START_TAG:
15                 if ("weather".equals(parser.getName())) {
16                     // 发现开始节点 为weather 创建集合
17                     weatherInfos = new ArrayList<Weather>();
18                 } else if ("day".equals(parser.getName())) {
19                     // 发现一个新的日期 对应的天气
20                     weatherInfo = new Weather();
21                     String id = parser.getAttributeValue(0);
22                     weatherInfo.setId(Integer.parseInt(id));
23                 } else if ("wendu".equals(parser.getName())) {
24                     String wendu = parser.nextText();
25                     weatherInfo.setWendu(Integer.parseInt(wendu));
26                 } else if ("wind".equals(parser.getName())) {
27                     String wind = parser.nextText();
28                     weatherInfo.setWind(Integer.parseInt(wind));
29                 } else if ("type".equals(parser.getName())) {
30                     String type = parser.nextText();
31                     weatherInfo.setType(type);
32                 }
33
34                 break;
35
36             case XmlPullParser.END_TAG:
37                 if ("day".equals(parser.getName())) {
38                     weatherInfos.add(weatherInfo);
39                 }
40                 break;
41             }
42             eventType = parser.next();// 控制解析器 解析下一个节点
43         }
44         is.close();
45         return weatherInfos;
46
47     }
48 }
时间: 2024-11-06 23:56:43

安卓开发(2)的相关文章

Eclipse+ADT+Android SDK 搭建安卓开发环境

要求 必备知识 windows 7 基本操作. 运行环境 windows 7 下载地址 环境下载 最近开接触Android(安卓)嵌入式开发,首要问题是搭建Andoid开发环境,由于本人用的是windows7的笔记本,也就只能到Windows中搭建Android 开发环境了! 就搭建环境都花了比较长的时间, 在各种版本之间折腾了比较久的时间, 装好后SDK包更新又是一个比较大的麻烦(天朝的网络大家懂的--).下面把我的安装过程和经验分享个大家!! 安装JDK 这里可以参考我之前写的一篇关于安装J

安卓开发-设置RadioButton的点击效果

在安卓开发中用到底部菜单栏 需要用到RadioButton这个组件 实际应用的过程中,需要对按钮进行点击,为了让用户知道是否点击可这个按钮,可以设置点击后 ,该按钮的颜色或者背景发生变化. layout中这部分的代码为: 1 <RadioButton 2 android:id="@+id/radio_button0" 3 android:layout_height="fill_parent" 4 android:layout_marginTop="2

我的第一个phonegap开发WebApp的demo 怎么搭建安卓开发环境以及安装phonegap

一.先来张图,赏心悦目观赏一下,哈 . 这个就是使用phonegap框架搭建起来的,运行在安卓环境上的第一个demo. 安卓的开发环境,大家都会搭建了,所以不赘述.讲一下,安装phonegap的步骤. 二.phonegap的安装   1. 设置系统变量系统变量 Path后面添加:(以下变量都是必须的,路径根据自己的设置)E:\android_sdk\sdk\tools;E:\android_sdk\sdk\platform-tools;E:\android_sdk\eclipse\plugins

.Net程序员快速学习安卓开发-布局和点击事件的写法

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 本系列课程 致力于老手程序员可以快速入门学习安卓开发.系统全面的从一个.Net程序员的角度一步步学习总结安卓开发. 上篇课程:全栈工程师必备:安卓移动端手机开发,第六课 主要内容: 布局 点击事件 布局 说到安卓前台页面的开发,就不得不说安卓的布局.也就是具体那个控件应该摆放的位置. 1.1相对布局 我们新建一个layout布局文件时,默认就是相对布局.相对布局是相对于非相对布局来说的.顾名思义,相对布

程序员带你学习安卓开发系列-Android文件存储

这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:.Net程序员快速学习安卓开发-布局和点击事件的写法 主要讲解了布局和点击事件的写法. 上篇文章补充: 控件单位介绍: px 像素 dip或者dp 设备独立像素 sp 比例像素 控件的高度宽度一般用dip或者dp.字体用sp. Android 存储数据项目: 描述:实现QQ登录效果.如图: 输入帐号密码,并勾选记住帐号 ,点击登录时,保存帐号信息.下次登陆可以直接显示上次保存的QQ帐号. 前台界面

程序员带你学习安卓开发,十天快速入门-基础知识(四)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 本系列课程是.Net程序员学习安卓开发系列课程. 下面是前三次课程列表: 程序员带你学习安卓开发,十天快速入门-安卓学习必要性 程序员带你学习安卓开发,十天快速入门-开发工具配置学习 程序员带你学习安卓开发,十天快速入-对比C#学习java语法 为了大家系统有效的快速入门安卓开发,推荐

程序员带你学习安卓开发,十天快速入门-开发工具配置学习

上次课程:.Net程序员学习Android开发-第一课 讲到,.Net程序员学习Android开发的必要性以及对安卓大环境的相关介绍. 其中看到有网友评论,称,搞C#的去搞安卓,还怪自己的移动平台不给力.有的人说,学习.Net就学.Net学习什么安卓.这时的我首先想到了,固步自封的大清朝.当然并不是对这部分人排斥.只能说是想法不一致,认知略有不同,也没有错与对,我只是想把我自己的想法表达出来,期望与您产生共鸣.的确迄今为止,我仍然认为C#是当今我见过的最好的语言.设计规范语法总使我赶到兴奋其优美

基于eclipse-java的平台上搭建安卓开发环境

首先感谢好人的分享!http://www.mamicode.com/info-detail-516839.html 系统:windows 7 若想直接安装eclipse—android的,请启动如下传送门: http://www.eclipse.org/downloads/eclipse-packages/ 安装思路: 1.先安装ADT-23.0.6.zip-2通过Android SDK Manager添加新的软件包. 注意事项: 在添加Android SDK时候不要一次性勾选选择太多否则安装极

安卓开发之闹钟实现(二)

多总结多思考,码农不是API调用师 当前进度: ListView显示现有闹钟 闹钟实现响铃 今日工作: 添加删除闹钟界面的设计实现 安卓开发的4大组件都需要在androidmenifest中注册方能使用 添加删除界面几个主要的知识点: 在提示框内显示多选框,显示单选框,显示文本框 alertDialog.setMultiChoiceItems alertDialog.setSingleChoiceItems alertDialog.setView android:descendantFocusa

使用Android Studio进行安卓开发教程

本教程介绍如何创建Android应用程序.它基于Android5.0(Lollipop)介绍Android Studio的用法. 安卓介绍 Android是基于Linux内核的操作系统.负责开发Android系统的项目被为Android Open Source Project (AOSP) ,由谷歌领导. Android系统支持后台处理,提供了丰富的用户界面库,使用的OpenGL标准支持2-D和3-D图形,并允许访问文件系统以及嵌入式SQLite数据库. Android应用包含可见和不可见组件,