package com.xiaomi.xms.sales.loader; import android.content.Context; import com.xiaomi.xms.sales.model.Image; import com.xiaomi.xms.sales.model.ProductInfo; import com.xiaomi.xms.sales.model.Tags; import com.xiaomi.xms.sales.request.HostManager; import com.xiaomi.xms.sales.request.Request; import com.xiaomi.xms.sales.request.HostManager.Parameters; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; public class RecommendProductLoader extends BaseLoader<RecommendProductLoader.Result> { private final String CACHE_KEY = "recommend_product"; private String mProductId; public RecommendProductLoader(Context context, String productId) { super(context); mProductId = productId; } public static final class Result extends BaseResult { public ArrayList<ProductInfo> mRecommandProducts; public Result() { mRecommandProducts = new ArrayList<ProductInfo>(); } public BaseResult shallowClone() { Result newResult = new Result(); newResult.mRecommandProducts = mRecommandProducts; return newResult; } @Override public int getCount() { return mRecommandProducts == null ? 0 : mRecommandProducts.size(); } } protected String getCacheKey() { return CACHE_KEY + mProductId; } @Override protected UpdateTask getUpdateTask() { return new RecommandProductUpdateTask(); } private class RecommandProductUpdateTask extends UpdateTask { @Override protected Request getRequest() { Request request = new Request(HostManager.getRecommendProduct()); request.addParam(Parameters.Keys.PRODUCT_ID, mProductId); return request; } } @Override protected Result parseResult(JSONObject json, Result result) throws Exception { if (Tags.isJSONResultOK(json)) { JSONArray jsonArray = json.getJSONArray(Tags.DATA); int number = jsonArray.length(); for (int i = 0; i < number; ++i) { JSONObject one = jsonArray.optJSONObject(i); if (one != null) { /** only get the fields that are needed by recommendation */ String productId = one.optString(Tags.Product.PRODUCT_ID); String productName = one.optString(Tags.Product.PRODUCT_NAME); String price = one.optString(Tags.Product.PRICE); String imageUrl = one.optString(Tags.Product.IMAGE_URL); String url = one.optString(Tags.Product.URL, ""); result.mRecommandProducts.add(new ProductInfo(productId, productName, price, null, null, false, new Image(imageUrl), url, null)); } } } return result; } @Override protected Result getResultInstance() { return new Result(); } }