前几天介绍的 MVVM 架构,可以参考这篇 [[Android APP] 01-架构介绍-MVVM]。今天要讲的是其中 Repository 的部分,Repository 通常用来提供资料,因为我的资料来源只有 API,就不那麽复杂了,直接在 Repository 串接 API。
本系统中有 2 个 Repository、3 支 API,这次以 JSON 结构比较简单的 CategoryRepository 来作范例。
我在这边用的是 Volley,当然你想用 Retrofit 或其他的 http client 也都可以。
关於 Volley 的使用可以参考我之前的文章: [Workshop记录-Volley与API]
public void get(CategoryVolleyCallback callback) {
StringRequest stringRequest = new StringRequest(Request.Method.GET,
"http://120.110.112.177:83/Chatbot/getCategories.php",
response -> {
Log.d(TAG, "onResponse: " + response);
ArrayList<Category> categoryList = new ArrayList<>();
try {
JSONObject json = new JSONObject(response);
JSONArray categories = json.getJSONArray("categories");
for (int i = 0; i < categories.length(); i++) {
JSONObject category = categories.getJSONObject(i);
categoryList.add(new Category(
category.getString("id"),
category.getString("name")));
}
callback.onSuccess(categoryList);
} catch (JSONException e) {
callback.onFail("发生一些错误\n" + e.getLocalizedMessage());
}
},
error -> {
Log.e(TAG, "onErrorResponse: ", error);
callback.onFail("发生一些错误\n" + error.toString());
});
mRQ.add(stringRequest);
}
因为从 API 取得资料是非同步运行的,所以参数中有个 Callback。Callback 的用意就是,当资料都收到之後,再透过 callback.onSuccess(categoryList);
回传给 ViewModel。如果不是使用 Callback 而是直接 return categoryList;
的话,会造成物件回传了,但物件里还是空的、ViewModel 没有拿到资料的状况。了解 Callback 的概念是很重要的哦!!
<<: 视觉化KBARS(3)-service、serviceImpl
>>: 那些被忽略但很好用的 Web API / Drag & Drop
新零售行销模式案例,全通路时代来临该如何布局,一直以来都在担任辅导顾问为中小企业解决网路行销问题但都...
透过 Object.defineProperty 可以设定 value writable 值可修改性...
还记得我们在 Day 13 的例子吗? 有个 Input 的 UI 元件,且它有以下 [Invali...
虽然铁人赛已暂告一个段落,但在[Day 27] Edge Impulse + BLE Sense实现...
Collection 攻击者会为了取得 ICS 环境中感兴趣的资料,进而使用许多技巧,透过监控的方式...