码迷,mamicode.com
首页 > 移动开发 > 详细

安卓开发(2)

时间:2015-08-03 18:45:39      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:

主要内容:布局,测试,文件读写,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 }

安卓开发(2)

标签:

原文地址:http://www.cnblogs.com/buptee/p/4699773.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!