Дальнейшие эксперименты по скрещиванию Volley и Loader привели меня к мысли о создании библиотеки. Чтобы вызывался Loader с параметрами и в одну строку. На подобии как это реализовано в Picaso. После пары вечеров что-то получилось…
JSON
{
"1":{"name":"Samsung","price":51200.6},
"2":{"name":"Lg","price":5400.6},
"3":{"name":"Alcatel","price":4500.6},
"4":{"name":"iPhone","price":4800.3},
"7":{"name":"iPad","price":2850.1}
}
Data
public class GoodsItem {
String name;
float price;
}
Loader
private String url = "http://192.168.1.103/shop.json";
private static final int LOADER_GOODS_ID = 1;
Map<Integer, GoodsItem> mGoodsMap = new HashMap<Integer, GoodsItem>();
@Override
protected void onCreate(Bundle savedInstanceState) {
...
FeedLoader.with(this).addLoader(LOADER_GOODS_ID, url, HashMap.class, new DelivererFeedLoader.Listener<Map<Integer, GoodsItem>>() {
@Override
public void onResponse(int loaderId,
Map<Integer, GoodsItem> goodsMap) {
mGoodsMap = goodsMap;
for (Map.Entry<Integer, GoodsItem> entry : mGoodsMap.entrySet()) {
Log.d(TAG , "Goods item : " + entry.getKey() + " : " + entry.getValue());
}
}
@Override
public void onErrorResponse(VolleyError data) {
Log.d(TAG , "onErrorResponse :" + data);
}
}).start(LOADER_GOODS_ID, this);