Android基础学习【历史流程重走】 ---- Android入门基础(二)

一、移动测试

1,测试信息


2,Junit单元测试
        【1】流程
                   编写待测试方法  ---   编写测试方法  ----  维护测试环境  ---  得到测试结果
        【2】简单Demo
eclipse环境:
//待测试代码
    public int add(int first, int second) {
        return (first + second);
    }   
//测试代码
public class MainJUnitTest extends AndroidTestCase {

    public void testAdd() throws Exception {
        MainActivity mainActivity = new MainActivity();
        int result = mainActivity.add(3, 4);
        assertEquals(7, result);
    }
}
Eclipse环境配置:
//环境维护
application下添加:
 <!-- 添加代码1 -->
        <uses-library android:name="android.test.runner" />
application外添加:
    <!-- 添加代码2 -->
    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:label="suibian"
        android:targetPackage="com.future.junittest" />
AS:
        【1】流程
                    编写待测试方法 ---  编写测试方法  ---- 维护测试环境  ---  得到测试结果
        【2】简单Demo
                                    扩展:【  AS中测试(不同开发工具)/ 单元测试框架  】  Instrumentation框架
//待测试代码
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}

/**
     * 两数相加的方法
     * @param first
* @param second
* @return    
* 注:公共方法才能进行单元测试【代码问题限定区域来解决问题】
     */
public int add(int first, int second) {
return (first + second);
}
}
//测试代码
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}


public void testAdd()throws Exception{
        MainActivity mainActivity = new MainActivity();
        int result = mainActivity.add(3,4);
Assert.assertEquals(8,result);
}
}
添加依赖包:【AS中不用在清单文件配置参数】

展示效果【错误情形】


二、Android数据存储

1,文件
        项目路径 --- 应用程序私有路径【硬编码】 ---  应用程序私有路径【API调用】
        【数据存储繁琐】
 /**
     * 文件保存数据的方式【API指定路径】
     * @param userNameFileStr 用户名数据
     * @param pwdFileStr      用户名密码
     */
    private void saveDataFilePrivateAPI(String userNameFileStr, String pwdFileStr) {
        if (!judgeStr("文件用户名", userNameFileStr)) {
            return;
        }
        if (!judgeStr("文件密码", pwdFileStr)) {
            return;
        }
        //String url = "/data/data/<包名>/files";
        String fileName = "infoFile.txt";
        /**
         * getFilesDir()  获取的是数据文件,在清除缓存数据时不会被清理;
         * 当清理当前目录下的数据后,相当于APP刚新安装
         *
         * getCacheDir() 获取的是缓存数据文件,清除缓存数据就会被清理
         */

        File file = new File(getFilesDir(), fileName);
        try {
            FileOutputStream fos = new FileOutputStream(file);
            fos.write((userNameFileStr + "##" + pwdFileStr).getBytes());
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 文件数据回显
     * @param userNameFile 用户名
     * @param pwdFile      密码
     */
    private void reShowFile(EditText userNameFile, EditText pwdFile) {

        File file = new File(getFilesDir(), "infoFile.txt");
        try {
            FileInputStream fis = new FileInputStream(file);
            byte[] buf = new byte[1024];
            fis.read(buf);
            fis.close();

            String name = new String(buf).split("##")[0];
            String pwd = new String(buf).split("##")[1];

            userNameFile.setText(name);
            pwdFile.setText(pwd);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
2,SD卡
         项目路径 --- 应用程序私有路径【硬编码】 ---  应用程序私有路径【API调用】
        SD卡可用性判断 ,空间判断
        【清除程序数据不能清除数据,只有到SD卡中删除数据才行】
        【绑定SD卡,与SD卡关系密切,不同应用间共享数据(安全性)】
    /**
     * SD卡保存数据方式【API路径】
     *
     * @param userNameSDStr
     * @param pwdSDStr
     */
    private void saveDataSDPrivateAPI(String userNameSDStr, String pwdSDStr) {
        if (!judgeStr("SD用户名", userNameSDStr)) {
            return;
        }
        if (!judgeStr("SD密码", pwdSDStr)) {
            return;
        }
//        需要先判断SD卡状态以及可用空间
        //判断SD卡状态
        if (!(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))) {
            Toast.makeText(MainActivity.this, "SD卡不可用", Toast.LENGTH_SHORT).show();
            return;
        }

        //获取可用空间
//        long storge1 = Environment.getExternalStorageDirectory().getTotalSpace();//获取全部空间
//        long storge1 = Environment.getExternalStorageDirectory().getFreeSpace();//获取可用空间

        long storge = Environment.getExternalStorageDirectory().getFreeSpace();//获取可用空间
        String desc = Formatter.formatFileSize(MainActivity.this, storge);
        Toast.makeText(MainActivity.this, desc + "可用空间", Toast.LENGTH_SHORT).show();

        try {
            File file = new File(Environment.getExternalStorageDirectory(), "infoSD.txt");
            FileOutputStream fos = new FileOutputStream(file);
            fos.write((userNameSDStr + "##" + pwdSDStr).getBytes());
            fos.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * SD卡数据回显
     *
     * @param userNameSD
     * @param pwdSD
     */
    private void reShowSD(EditText userNameSD, EditText pwdSD) {
        File file = new File(Environment.getExternalStorageDirectory(), "infoSD.txt");
        try {
            FileInputStream fis = new FileInputStream(file);
            byte[] buf = new byte[1024];
            fis.read(buf);
            fis.close();

            String name = new String(buf).split("##")[0];
            String pwd = new String(buf).split("##")[1];

            userNameSD.setText(name);
            pwdSD.setText(pwd);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
3,SP 
  /**
     * SP保存数据方式
     *
     * @param userNameSPStr
     * @param pwdSPStr
     */
    private void saveDataSPPrivate(String userNameSPStr, String pwdSPStr) {
        SharedPreferences sp = getSharedPreferences("infoSP", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.putString("name", userNameSPStr);
        editor.putString("pwd", pwdSPStr);
        editor.commit();
    }
    /**
     * SP数据回显
     *
     * @param userNameSP
     * @param pwdSP
     */
    private void reShowSP(EditText userNameSP, EditText pwdSP) {
        SharedPreferences sp = getSharedPreferences("infoSP", Activity.MODE_PRIVATE);
        String name = sp.getString("name", "");
        String pwd = sp.getString("pwd", "");
        userNameSP.setText(name);
        pwdSP.setText(pwd);
    }
数据保存及数据回显效果:

源码Demo

三、xml的生成与解析

1,xml文件生成

    public void save(View view) {
        String name = userName.getText().toString().trim();
        String ID = userID.getText().toString().trim();
        if (name.isEmpty() || ID.isEmpty()) {
            Toast.makeText(MainActivity.this, "用户名或者用户ID不能为空!", Toast.LENGTH_SHORT).show();
            return;
        }
        XmlSerializer xmlCreate = Xml.newSerializer();

        try {
            /**
             * 初始化
             */
            File file = new File(getFilesDir(), name + ".xml");
            FileOutputStream fos = new FileOutputStream(file);
            xmlCreate.setOutput(fos, "utf-8");

            //设置xml头
            xmlCreate.startDocument("utf-8", true);
            /**
             * 内容主体
             */
            xmlCreate.startTag(null, "name");
            xmlCreate.text(name);
            xmlCreate.endTag(null, "name");

            xmlCreate.startTag(null, "nameID");
            xmlCreate.text(ID);
            xmlCreate.endTag(null, "nameID");
 
            xmlCreate.startTag(null, "sex");
            xmlCreate.text(sex);
            xmlCreate.endTag(null, "sex");
            //设置xml结束
            xmlCreate.endDocument();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
2,xml文件解析
   /**
     * 解析数据   --   展示数据
     *
     * @param view
     */
    public void read(View view) {
        XmlPullParser pullParser = Xml.newPullParser();
        String fileName = userName.getText().toString().trim();
        if (fileName.isEmpty()) {
            Toast.makeText(MainActivity.this, "用户名不能为空!", Toast.LENGTH_SHORT).show();
            return;
        }
        try {
            File file = new File(getFilesDir(), fileName + ".xml");
            if (file.exists() && file.length() > 0) {
                FileInputStream fis = new FileInputStream(file);
                StringBuilder sb = new StringBuilder();
                pullParser.setInput(fis, "utf-8");
                if (pullParser.getEventType() == XmlPullParser.START_DOCUMENT) {//xml开头
                    pullParser.next();
                    while (pullParser.getEventType() == XmlPullParser.START_TAG) {
                        String tagName = pullParser.getName();
                        String tagText = pullParser.nextText();
                        sb.append(tagName + "---" + tagText + "\n");
                        pullParser.next();
                    }
                    resultInfo.setText(sb.toString());
                }
                Toast.makeText(MainActivity.this, "获取信息成功!", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "查无此人!", Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
效果展示:

源码Demo



尽管人生那么无情,我们本人还是应当把自己尽量改好,少给人一些痛苦,多给人一些快乐。真正的光明不是没有黑暗,而是不被黑暗所吞噬;真正的英雄不是没有卑劣的情操,而是不被卑劣的情操所征服。所以,在你战胜外来的敌人之前,先得战胜你内在的敌人,你不必害怕沉沦堕落,只消你能不断的自拔与更新。~_~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

壹叁零壹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值