package com.candc.findlookmanager; import java.util.List; import org.json.JSONException; import org.json.JSONObject; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import cn.bmob.v3.BmobQuery; import cn.bmob.v3.datatype.BmobFile; import cn.bmob.v3.listener.FindListener; import cn.bmob.v3.listener.SaveListener; import cn.bmob.v3.listener.UploadFileListener; import com.candc.service.NetService; /** * 作者: Stonekity(596017443@qq.com) * * 时间: 2014年10月10日 上午02:05 * * 描述: FindLook主列表界面 */ public class GoodInfoActivity extends ImageSelectHelperActivity implements OnClickListener { private static final String TAG = "FindLookActivity"; // 获取商品信息API private static final String URl_BASE = "http://www.liantu.com/tiaoma/query.php"; private Good good = null; private GoodsHolder goodsHolder = null; // 条形码扫描结果 private String result = ""; // 网络请求返回的Json数据 private String response = ""; // 得到的BitMap private Bitmap bitmap = null; // 判断"添加商品"按钮是否被点击 private Boolean isClicked = false; // 判断Bmob数据库中是否存在当前商品 private Boolean isBmobDatabaseHaveTheGood = false; // 加载对话框 private ProgressDialog progress = null; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { //Bmob中存在当前商品 if(msg.what == MsgType.MSG_BMOB_DID_HAVE_THE_GOOD) { //从Bmob中获取商品数据 reloadView(); } //Bmob中不存在当前商品 if(msg.what == MsgType.MSG_BMOB_DID_NOT_HAVE_THE_GOOD) { //从API中获取商品数据 queryGoodInfoFromAPI(result); } // Json解析完成 if (msg.what == MsgType.MSG_PARSE_JSON_FINISHED) { // 开始获取商品对应的名称(是图片, 不是文字) loadGoodNameBitmap(); Log.i(TAG, response); } //商品名称图片加载完成 if (msg.what == MsgType.MSG_LOAD_BITMAP_FINISHED) { progress.dismiss(); // 刷新UI,适配数据 reloadView(); } //检查Bmob数据库中是否已经存在该商品的操作完成 if(msg.what == MsgType.MSG_CHECK_IS_BMOB_HAVE_THE_GOOD_FINISHED) { if(!isBmobDatabaseHaveTheGood) uploadImageToBmob(); else { toast("商品已经存在"); } } //商品图片上传完成 if(msg.what == MsgType.MSG_UPLOAD_BITMAP_FINISHED) { saveGoodInfo(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_find_look); initView(); // 查询商品信息 isBmobDatabaseHaveTheGood(result); } private void initView() { // 获取到扫描的结果 result = getIntent().getExtras().getString("scan_res"); // result = "6954674001235"; progress = new ProgressDialog(this); progress.setCanceledOnTouchOutside(false); good = new Good(); goodsHolder = new GoodsHolder(); goodsHolder.tvGoodCode = (TextView) findViewById(R.id.tv_good_code); goodsHolder.tvGoodName = (EditText) findViewById(R.id.tv_good_name); goodsHolder.tvGoodPrice = (EditText) findViewById(R.id.tv_good_price); goodsHolder.tvGoodPlace = (EditText) findViewById(R.id.tv_good_place); goodsHolder.tvGoodNation = (EditText) findViewById(R.id.tv_good_nation); goodsHolder.tvComCode = (EditText) findViewById(R.id.tv_com_code); goodsHolder.tvComName = (EditText) findViewById(R.id.tv_com_name); goodsHolder.tvRegState = (EditText) findViewById(R.id.tv_reg_state); // --------适配老数据 goodsHolder.tvName = (EditText) findViewById(R.id.tv_good_name_old); goodsHolder.tvDescription = (EditText) findViewById(R.id.tv_good_info_old); goodsHolder.tvValue = (EditText) findViewById(R.id.tv_good_value_old); goodsHolder.imgPicture = (ImageView) findViewById(R.id.ivImageSelected); // --------适配老数据 goodsHolder.imgGoodName = (ImageView) findViewById(R.id.img_good_name); goodsHolder.btnGoodAdd = (Button) findViewById(R.id.btn_good_add); goodsHolder.btnGoodAdd.setOnClickListener(this); findViewById(R.id.button1).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View arg0) { setImageSizeBoundary(400); // optional. default is 500. setCropOption(1, 1); // optional. default is no crop. // setCustomButtons(btnGallery, btnCamera, btnCancel); // // you can set these buttons. startSelectImage(); } }); getSelectedImageFile(); // extract selected & saved image file. } /** * 加载商品信息, 刷新UI */ private void reloadView() { goodsHolder.tvGoodCode.setText(good.getGoodCode()); goodsHolder.tvGoodName.setText(good.getGoodName()); if (!good.getGoodPrice().equals("")) { //从API解析出的商品价格不含单位 if(isBmobDatabaseHaveTheGood){ goodsHolder.tvGoodPrice.setText(good.getGoodPrice()); }else { goodsHolder.tvGoodPrice.setText("¥" + good.getGoodPrice() + "元"); } goodsHolder.tvGoodPrice.setEnabled(false); } else { goodsHolder.tvGoodPrice.setHint("暂无"); goodsHolder.tvGoodPrice.setEnabled(true); } if (!good.getGoodPlace().equals("")) { goodsHolder.tvGoodPlace.setText(good.getGoodPlace()); goodsHolder.tvGoodPlace.setEnabled(false); } else { goodsHolder.tvGoodPlace.setHint("暂无"); goodsHolder.tvGoodPlace.setEnabled(true); } if (!good.getGoodNation().equals("")) { goodsHolder.tvGoodNation.setText(good.getGoodNation()); goodsHolder.tvGoodNation.setEnabled(false); } else { goodsHolder.tvGoodNation.setHint("暂无"); goodsHolder.tvGoodNation.setEnabled(true); } if (!good.getComCode().equals("")) { goodsHolder.tvComCode.setText(good.getComCode()); goodsHolder.tvComCode.setEnabled(false); } else { goodsHolder.tvComCode.setHint("暂无"); goodsHolder.tvComCode.setEnabled(true); } if (!good.getComName().equals("")) { goodsHolder.tvComName.setText(good.getComName()); goodsHolder.tvComName.setEnabled(false); } else { goodsHolder.tvComName.setHint("暂无"); goodsHolder.tvComName.setEnabled(true); } if (!good.getRegState().equals("")) { goodsHolder.tvRegState.setText(good.getRegState()); goodsHolder.tvRegState.setEnabled(false); goodsHolder.imgGoodName.setImageBitmap(bitmap); goodsHolder.imgGoodName.setVisibility(View.VISIBLE); goodsHolder.tvGoodName.setEnabled(false); goodsHolder.tvGoodName.setVisibility(View.GONE); } else { goodsHolder.tvRegState.setHint("暂无"); goodsHolder.tvRegState.setEnabled(true); goodsHolder.imgGoodName.setImageBitmap(bitmap); goodsHolder.imgGoodName.setVisibility(View.GONE); goodsHolder.tvComName.setHint("商品名称"); goodsHolder.tvGoodName.setText(""); goodsHolder.tvGoodName.setEnabled(true); goodsHolder.tvGoodName.setVisibility(View.VISIBLE); } if (!good.getName().equals("")) { goodsHolder.tvName.setText(good.getName()); } else { goodsHolder.tvName.setHint("暂无"); } if(!good.getDescription().equals("")) { goodsHolder.tvDescription.setText(good.getDescription()); } else { goodsHolder.tvDescription.setHint("暂无"); } if(!good.getValue().equals("")) { goodsHolder.tvValue.setText(good.getValue()); } else { goodsHolder.tvValue.setHint("暂无"); } ImageView imageView = (ImageView) findViewById(R.id.ivImageSelected); //加载缩略图 if (! (good.getPicture()==null) ) { good.getPicture().loadImageThumbnail(this, imageView, 100, 100, 100); } else { imageView.setBackgroundResource(R.drawable.ic_app); } } /** * 查询对应条形码的商品信息 * @param code */ private void queryGoodInfoFromAPI(String code) { // API对应的URL, 使用get请求方式 final String url = URl_BASE + "?ean=" + code; progress.show(); new Thread(new Runnable() { @Override public void run() { try { // 向服务器发出请求 response = NetService.fetchHtml(url); // 开始解析获取到的Json数据, 得到一个Good对象 parseJsonToObject(response); // 发送消息, 解析完成 Message msg = new Message(); msg.what = MsgType.MSG_PARSE_JSON_FINISHED; mHandler.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); } } }).start(); } /** * 因为API中商品名称是图片, 不是文字, 没有办法解析, 所以只有将图片下载下来 */ private void loadGoodNameBitmap() { new Thread(new Runnable() { @Override public void run() { // 向服务器请求获取到对应的图片 bitmap = NetService.getHttpBitmap(good.getGoodName()); // 发出消息, 图片加载完成 Message msg = new Message(); msg.what = MsgType.MSG_LOAD_BITMAP_FINISHED; mHandler.sendMessage(msg); } }).start(); } /** * 解析服务器返回的Json数据 * * @param jsonString * @throws JSONException */ private void parseJsonToObject(String jsonString) { try { JSONObject object = new JSONObject(jsonString); if (object.has("ean")) good.setGoodCode(object.getString("ean")); else good.setGoodCode(""); if (object.has("titleSrc")) good.setGoodName(object.getString("titleSrc")); else good.setGoodName(""); if (object.has("price")) good.setGoodPrice(object.getString("price")); else good.setGoodPrice(""); if (object.has("supplier")) good.setGoodPlace(object.getString("supplier")); else good.setGoodPlace(""); if (object.has("guobie")) good.setGoodNation(object.getString("guobie")); else good.setGoodNation(""); if (object.has("faccode")) good.setComCode(object.getString("faccode")); else good.setComCode(""); if (object.has("fac_name")) good.setComName(object.getString("fac_name")); else good.setComName(""); if (object.has("fac_status")) good.setRegState(object.getString("fac_status")); else good.setRegState(""); } catch (JSONException e) { e.printStackTrace(); } } /** * 检查商品信息是否完善, 检查的范围只包含自定义的属性, 扫描出来的属性不检查 * * @return */ private Boolean checkIsInfoCompleted() { if (goodsHolder.tvName.getText().equals("") || goodsHolder.tvDescription.getText().equals("") || goodsHolder.tvValue.getText().equals("")) { toast("请先完善下方商品信息后,重新添加"); return false; } else { return true; } } /** * 检查Bmob数据库中是否存在当前商品 * @param goodCode */ private void isBmobDatabaseHaveTheGood(String goodCode) { progress.show(); BmobQuery<Good> query = new BmobQuery<Good>(); query.addWhereEqualTo("goodCode", goodCode); query.findObjects(this, new FindListener<Good>() { @Override public void onSuccess(List<Good> arg0) { if (arg0.size() > 0) { isBmobDatabaseHaveTheGood = true; //从Bmob数据库中获取到当前的对象 if(arg0.get(0)!=null) { good = arg0.get(0); } //Bmob数据库中的确存在当前商品 Message msg = new Message(); msg.what = MsgType.MSG_BMOB_DID_HAVE_THE_GOOD; mHandler.sendMessage(msg); } else { isBmobDatabaseHaveTheGood = false; //Bmob数据库中不存在当前商品 Message msg = new Message(); msg.what = MsgType.MSG_BMOB_DID_NOT_HAVE_THE_GOOD; mHandler.sendMessage(msg); } progress.dismiss(); } @Override public void onError(int arg0, String arg1) { toast("查询Bmob商品库失败"); progress.dismiss(); } }); } /** * 将商品信息保存到Bmob数据库中 * * @return */ private void saveGoodInfo() { progress.show(); // 对商品信息进行检查是否为空 if (checkIsInfoCompleted()) { good.setGoodCode(goodsHolder.tvGoodCode.getText().toString()); good.setGoodName(goodsHolder.tvGoodName.getText().toString()); good.setGoodPrice(goodsHolder.tvGoodPrice.getText().toString()); good.setGoodPlace(goodsHolder.tvGoodPlace.getText().toString()); good.setGoodNation(goodsHolder.tvGoodNation.getText().toString()); good.setComCode(goodsHolder.tvComCode.getText().toString()); good.setComName(goodsHolder.tvComName.getText().toString()); good.setRegState(goodsHolder.tvRegState.getText().toString()); good.setType("XX"); good.setUrl("http://www.meituan.com"); good.setName(goodsHolder.tvName.getText().toString()); good.setDescription(goodsHolder.tvDescription.getText().toString()); good.setValue(goodsHolder.tvValue.getText().toString()); good.save(this, new SaveListener() { @Override public void onSuccess() { toast("添加成功"); progress.dismiss(); } @Override public void onFailure(int arg0, String arg1) { toast("添加失败"); progress.dismiss(); } }); } else { // do nothing } } private void uploadImageToBmob() { progress.show(); final BmobFile picture = new BmobFile(getSelectedImageFile()); picture.uploadblock(this, new UploadFileListener() { @Override public void onSuccess() { good.setPicture(picture); Message msg = new Message(); msg.what = MsgType.MSG_UPLOAD_BITMAP_FINISHED; mHandler.sendMessage(msg); toast("图片上传成功"); progress.dismiss(); } @Override public void onProgress(Integer value) { toast("已经上传 " + value + "%"); } @Override public void onFailure(int code, String msg) { toast("上传文件失败:" + msg); progress.dismiss(); } }); } @Override public void onClick(View v) { if (good.getGoodCode().equals("")) { toast("商品不存在,无法添加"); return; } if (isClicked) { toast("请不要重复添加"); return; } //判断当前Bmob数据库中是否存在该商品 if(!isBmobDatabaseHaveTheGood) { Message msg = new Message(); msg.what = MsgType.MSG_CHECK_IS_BMOB_HAVE_THE_GOOD_FINISHED; mHandler.sendMessage(msg); } else { toast("商品已经存在,请勿重复添加"); } isClicked = true; } public void toast(String toast) { Toast.makeText(this, toast, Toast.LENGTH_SHORT).show(); } }