package com.example.fei.yhb_20.ui; import android.app.Dialog; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.bmob.BmobConfiguration; import com.bmob.BmobPro; import com.bmob.BmobProFile; import com.bmob.btp.callback.DownloadListener; import com.example.fei.yhb_20.R; import com.example.fei.yhb_20.bean.Merchant; import com.example.fei.yhb_20.bean.MerchantInfo; import com.example.fei.yhb_20.utils.MyUtils; import com.fenjuly.combinationimageview.CombinationImageView; import java.util.ArrayList; import java.util.Timer; import butterknife.ButterKnife; import butterknife.InjectView; import cn.bmob.v3.BmobUser; import cn.bmob.v3.listener.UpdateListener; public class MerchantInfoPage extends ActionBarActivity implements View.OnClickListener { private static final String TAG = "MerchantInfoPage"; @InjectView(R.id.tv_info_merchantName)TextView mMerchantName; @InjectView(R.id.tv_info_address)TextView mAddress; @InjectView(R.id.tv_info_phone)TextView mPhone; @InjectView(R.id.tv_info_onTime)TextView mOnTime; @InjectView(R.id.tv_info_sort)TextView mSort; @InjectView(R.id.rl_info_0)RelativeLayout relativeLayout0; @InjectView(R.id.rl_info_1)RelativeLayout relativeLayout1; @InjectView(R.id.rl_info_2)RelativeLayout relativeLayout2; @InjectView(R.id.rl_info_3)RelativeLayout relativeLayout3; @InjectView(R.id.rl_info_4)RelativeLayout relativeLayout4; @InjectView(R.id.rl_info_5)RelativeLayout relativeLayout5; //同步与异步之间的关联有问题 // @InjectView(R.id.combinationImage)CombinationImageView combinationImageView; private CombinationImageView combinationImageView; private Merchant merchant; private MerchantInfo merchantInfo; private View view; ArrayList<String> localpaths; ArrayList<String> photoPaths; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); view= LayoutInflater.from(this).inflate(R.layout.activity_merchant_info_page,null); setContentView(view); ButterKnife.inject(this); merchant = BmobUser.getCurrentUser(this,Merchant.class); BmobConfiguration config = new BmobConfiguration.Builder(this).customExternalCacheDir("目录名").build(); BmobPro.getInstance(this).initConfig(config); initViews(); initEvents(); } private void initViews() { if (merchant!=null){ mMerchantName.setText(merchant.getMerchantName()); //在这里用反射来实现 merchantInfo= (MerchantInfo) MyUtils.formatObjectforTextView(MerchantInfo.class, merchant.getMerchantInfo()); if (merchantInfo!=null){ mAddress.setText(merchantInfo.getAddress()); mPhone.setText(merchantInfo.getPhone()); mOnTime.setText(merchantInfo.getOnTime()); mSort.setText(merchantInfo.getSort()); } if (merchant.getPhotoPaths()!=null){ combinationImageView = (CombinationImageView) view.findViewById(R.id.combinationImage); combinationImageView.addImageView(R.drawable.example5); photoPaths = merchant.getPhotoPaths(); localpaths = new ArrayList<>(); for (int i = 0; i < photoPaths.size(); i++) { BmobProFile.getInstance(MerchantInfoPage.this).download(photoPaths.get(i), new DownloadListener() { @Override public void onSuccess(String fullPath) { Log.d(TAG, "下载成功:" + fullPath); localpaths.add(fullPath); } @Override public void onProgress(String localPath, int percent) { Log.d(TAG, localPath + percent); } @Override public void onError(int statuscode, String errormsg) { Log.d(TAG, "下载出错:" + statuscode + "--" + errormsg); combinationImageView.addImageView(R.drawable.example5); } }); } new TimerTask(1, combinationImageView); }else{ Log.d(TAG, "还没有设置头像"); combinationImageView = (CombinationImageView) findViewById(R.id.combinationImage); combinationImageView.addImageView(R.drawable.example5); } } } //TODO 请教 public class TimerTask { int count = 0; Timer timer; public TimerTask(int seconds, final CombinationImageView combinationImageView) { timer = new Timer(); timer.schedule(new java.util.TimerTask() { @Override public void run() { Log.d(TAG, String.valueOf(count)); //do something Log.d(TAG, localpaths.size() + ":" + photoPaths.size()); if (localpaths.size() == photoPaths.size()) { combinationImageView.removeAllView(); String test = "/storage/emulated/0/Android/data/com.example.fei.yhb_20/cache/目录名/Download/98c4ae3b68cb434cb0405e54cc52aa98.png"; for (int i = 0; i < localpaths.size(); i++) { Bitmap imageBitmap = BitmapFactory.decodeFile(localpaths.get(i)); combinationImageView.addImageView(imageBitmap); combinationImageView.refreshDrawableState(); } if (combinationImageView.getNumbersOfView() > localpaths.size()) { combinationImageView.removeView(0); } } } }, 1000, seconds * 1000); } } private void initEvents() { relativeLayout0.setOnClickListener(this); relativeLayout1.setOnClickListener(this); relativeLayout2.setOnClickListener(this); relativeLayout3.setOnClickListener(this); relativeLayout4.setOnClickListener(this); relativeLayout5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_merchant_info_page, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.rl_info_0: break; case R.id.rl_info_1: //查看所有的图片 if (merchant.getPhotoPaths() != null) { String[] paths = merchant.getPhotoPaths().toArray(new String[merchant.getPhotoPaths().size()]); Intent intent = new Intent(this, GalleryUrlActivity.class); intent.putExtra("photoUrls", paths); startActivity(intent); } break; case R.id.rl_info_2: showChangeInfo(mAddress.getText().toString(),2); break; case R.id.rl_info_3: showChangeInfo(mPhone.getText().toString(),3); break; case R.id.rl_info_4: showChangeInfo(mOnTime.getText().toString(),4); break; case R.id.rl_info_5: showChangeInfo(mSort.getText().toString(),5); break; default: break; } } private void showChangeInfo(final String from, final int index){ View view = LayoutInflater.from(this).inflate(R.layout.change_info_dialog,null); final Dialog dialog = new Dialog(this,R.style.normal_dialog_style); dialog.setContentView(view); TextView mFrom = (TextView) view.findViewById(R.id.tv_change_info); mFrom.setText(from); final EditText mTo = (EditText) view.findViewById(R.id.et_change_info); Button cancel = (Button) view.findViewById(R.id.change_info_cancel); Button ok = (Button) view.findViewById(R.id.change_info_ok); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mTo.getText().toString()!=null){ switch (index){ case 0: break; case 1: break; case 2: merchantInfo.setAddress(mTo.getText().toString()); break; case 3: merchantInfo.setPhone(mTo.getText().toString()); break; case 4: merchantInfo.setOnTime(mTo.getText().toString()); break; case 5: merchantInfo.setSort(mTo.getText().toString()); break; default: break; } merchant.setMerchantInfo(merchantInfo); merchant.update(MerchantInfoPage.this,new UpdateListener() { @Override public void onSuccess() { Toast.makeText(MerchantInfoPage.this,"更新信息成功",Toast.LENGTH_LONG).show(); dialog.dismiss(); switch (index){ case 0: break; case 1: break; case 2: mAddress.setText(mTo.getText()); break; case 3: mPhone.setText(mTo.getText()); break; case 4: mOnTime.setText(mTo.getText()); break; case 5: mSort.setText(mTo.getText()); break; default: break; } } @Override public void onFailure(int i, String s) { Toast.makeText(MerchantInfoPage.this,"更新信息失败",Toast.LENGTH_LONG).show(); } }); }else{ Toast.makeText(MerchantInfoPage.this,"您还没有填入更改信息",Toast.LENGTH_LONG).show(); } } }); dialog.setCanceledOnTouchOutside(false); dialog.show(); } }