工作日記-首次安卓開發(待測試)
阿新 • • 發佈:2020-10-26
前言
刀具組最近上線了新的業務,週一刀具組很多人請假了,但是又有一些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;
}
硬體測試
未完待續...