MoneyActivity 是一個典型的 Android 傳統寫法(非 MVP/MVVM),實現了「選擇年月 → 請求薪資列表 → 顯示在 ListView」的完整流程。代碼包含網絡請求、日期選擇、JSON 解析、UI 更新等核心模塊。
onCreate)private View backBtn; // 返回按鈕
private EditText dateEdit; // 年月輸入框(不可直接編輯,點擊彈出選擇器)
private ListView moneyList; // 薪資列表
private List<Map<String, Object>> data = new ArrayList<>(); // 列表數據源
Handler handler = new Handler(this); // UI 線程 Handler,用於網絡回調
HttpManager httpManager = new HttpManager(handler); // 封裝的網絡工具類
啟動時自動獲取當前年月的數據:getList(year, month)。
getList)構造帶 sid、年、月參數的 URL,發送 what=0 的 Message 給 HttpManager 異步獲取數據。
onClick → DatePickerDialog)dateEdit 顯示並重新請求 getList。findDatePicker 隱藏 DatePicker 中的「日」選擇器(只保留年月)。handleMessage)case 0: // 網絡返回
String result = (String) msg.obj;
JSONObject json = new JSONObject(result);
if ("1".equals(json.getString("error_code"))) { // 業務錯誤
DialogUtil.showDialog(...);
return false;
}
JSONArray list = json.getJSONObject("data").getJSONArray("list");
// 遍歷構建 Map 列表
for (JSONObject item : list) {
Map<String, Object> map = new HashMap<>();
map.put("money_type", item.getString("Type"));
map.put("money_num", item.getString("value"));
data.add(map);
}
// 綁定 SimpleAdapter
moneyList.setAdapter(new SimpleAdapter(...));
break;
WeakReference 或 static Handler + WeakReference<Activity>。HttpManager 疑似自定義封裝,現代項目建議遷移到 OkHttp/Retrofit + 協程/Flow。runOnUiThread 或 RxJava)。"Type"、"value" 應定義為常量。這段代碼展示了 Android 早期「萬能 Activity」模式的典型結構:View 初始化 → 事件綁定 → 異步請求 → Handler 回調 → 解析數據 → 更新 UI。雖然結構清晰,但在現代開發中應拆分職責,引入 ViewBinding、ViewModel、Repository 等架構組件,提升可維護性與測試性。