zoukankan      html  css  js  c++  java
  • 工作日记-首次安卓开发

    前言

    刀具组最近上线了新的业务,周一刀具组很多人请假了,但是又有一些bug着急改,就分配我们组帮助修改刀具组的一些bug和业务需求变更,其中涉及到了安卓开发。这篇笔记主要记录了,一个几乎没学习过安卓的Java开发,修改安卓代码遇到的一些问题,希望给大家有所帮助。

    环境搭建

    搭建环境部分首先按照下面的链接进行搭建

    使用Android Studio搭建Android集成开发环境(图文教程)

    svn下载代码部分略去不表

    使用android studio打开项目后,遇到了如下问题

    项目路径问题

    因为项目路径中包含中文,所以打开项目的构建过程会报错,如图所示:

    将路径修改为不包含中文的路径,该问题解决。

    platform异常

    解决了上述问题后自动build过程中报了下面的错误

    按照下面的提示,使用SDK Managerinstall 23版本的sdk后问题消失。

    需求修改

    本次需求针对对读写器的单次盘点功能,将单次盘点的超时时间变长。

    首先,查看API中是否可修改,查看API后,发现单次盘点的API不需要传递超时时长,应该是默认写在代码中了,这种方法无法实现。

    上面的方法无法实现,我们就只能考虑修改应用层代码了。分析后发现,应用代码只需要增加调用单次盘点的循环次数,并且把循环次数的参数抽取到配置文件中,即可实现需求。

    循环代码

    循环代码中需要考虑增加的业务逻辑增加到哪一层的问题,着重需要分析是否会影响其他业务。修改后代码如下:

     public String readUHFTag() {
    
            String res = "";
            int count = 0;
            UHFTAGInfo strUII = null;
    
            //在应用层增加单次盘点的超时时长
            while (strUII == null && count < 5) {
                strUII = mReader.inventorySingleTag();
                count++;
            }
    
            if (strUII != null) {
                playSound(1);
                res = strUII.getEPC();
            } else {
                playSound(2);
                return "";
            }
            return res;
        }
    

    参数抽取

    参数抽取部分,我查阅了相关资料后,先确定了一个方案:每次使用参数都进行读取。

    这种方式的优点是,修改后,可以热加载;缺点是可能会降低性能。

    在assets目录中增加一个config.properties配置文件,并增加配置项

    #单次盘点循环次数
    singlereader.count=5
    

    修改代码如下:

    增加一个读取配置文件的方法

        /**
         * 读取配置文件
         *
         * @param context 配置文件名字  包名key
         * @return
         */
        private String getPackageName(Context context, String configName, String packageNameKey) {
            String result = "";
            Properties properties = new Properties();
            InputStream is = null; //这两个都是获得文件的流文件
            try {
                is = context.getAssets().open(configName);
                properties.load(is);//is是通过上面获得的输入流
                result = properties.getProperty(packageNameKey);//通过key获得相应的值
                Log.i("kaijiguangbo Config", result);
            } catch (IOException e) {
                e.printStackTrace();
                Log.i("Conf error", "读取不到配置文件");
            }
            return result;
        }
    

    使用代码增加如下:

    public String readUHFTag() {
    
            String res = "";
            int count = 0;
            UHFTAGInfo strUII = null;
    
    
            //获取单次盘点次数
            String singleReaderCount = getPackageName(MainActivity.this, "config.properties", "singlereader.count");
    
            //在应用层增加单次盘点的超时时长
            while (strUII == null && count < Integer.parseInt(singleReaderCount)) {
                strUII = mReader.inventorySingleTag();
                count++;
            }
    
            if (strUII != null) {
                playSound(1);
                res = strUII.getEPC();
            } else {
                playSound(2);
                return "";
            }
            return res;
        }
    

    硬件测试

    请教了安卓开发相关的同事,在andriod studio上进行调试,可以用usb直连上硬件,点击debug按钮,然后就可以打断点调试了。

    ps:debug按钮,是帮助我们省略了打成apk包并发布到平板的过程。

    测试过程如下:

    点击debug后,开始构建,如果系统中已经存在一个app,就会提示我们是否需要删除原来的app

    点击ok,会发现原来的app已经被卸载,平板自动打开新的app,就可以调试了。

    点击关闭就可以结束调试。

  • 相关阅读:
    C# Asp.net 获取上上次请求的url
    Asp.net 中 Get和Post 的用法
    慎用JavaScript:void(0)
    JS验证RadioButton列表或CheckBox列表是否已填写
    .net 中viewstate的原理和使用
    Javascript与C#互相调用
    获取当前页面URL并UTF8编码之
    C#信息采集工具实现
    C#泛型编程
    C#正则表达式提取HTML中IMG标签的URL地址 .
  • 原文地址:https://www.cnblogs.com/ging/p/13877780.html
Copyright © 2011-2022 走看看