1. 程式人生 > 實用技巧 >工作日記-首次安卓開發(待測試)

工作日記-首次安卓開發(待測試)

前言

刀具組最近上線了新的業務,週一刀具組很多人請假了,但是又有一些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;
    }

硬體測試

未完待續...