BasicInfoEditActivity.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. package com.sk.weichat.ui.me;
  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.app.DatePickerDialog;
  5. import android.app.ProgressDialog;
  6. import android.content.DialogInterface;
  7. import android.content.Intent;
  8. import android.net.Uri;
  9. import android.os.Bundle;
  10. import android.text.TextUtils;
  11. import android.util.Log;
  12. import android.view.View;
  13. import android.widget.Button;
  14. import android.widget.DatePicker;
  15. import android.widget.EditText;
  16. import android.widget.ImageView;
  17. import android.widget.RadioButton;
  18. import android.widget.TextView;
  19. import com.alibaba.fastjson.JSON;
  20. import com.android.volley.Response.ErrorListener;
  21. import com.android.volley.VolleyError;
  22. import com.loopj.android.http.AsyncHttpClient;
  23. import com.loopj.android.http.AsyncHttpResponseHandler;
  24. import com.loopj.android.http.RequestParams;
  25. import com.nostra13.universalimageloader.core.ImageLoader;
  26. import com.sk.weichat.MyApplication;
  27. import com.sk.weichat.R;
  28. import com.sk.weichat.bean.Area;
  29. import com.sk.weichat.bean.User;
  30. import com.sk.weichat.db.dao.UserDao;
  31. import com.sk.weichat.helper.AvatarHelper;
  32. import com.sk.weichat.helper.LoginHelper;
  33. import com.sk.weichat.ui.base.BaseActivity;
  34. import com.sk.weichat.ui.tool.SelectAreaActivity;
  35. import com.sk.weichat.util.CameraUtil;
  36. import com.sk.weichat.util.ProgressDialogUtil;
  37. import com.sk.weichat.util.StringUtils;
  38. import com.sk.weichat.util.TimeUtils;
  39. import com.sk.weichat.util.ToastUtil;
  40. import com.sk.weichat.volley.ObjectResult;
  41. import com.sk.weichat.volley.Result;
  42. import com.sk.weichat.volley.StringJsonObjectRequest;
  43. import org.apache.http.Header;
  44. import java.io.File;
  45. import java.io.FileNotFoundException;
  46. import java.util.Date;
  47. import java.util.GregorianCalendar;
  48. import java.util.HashMap;
  49. /**
  50. * 我的基本资料界面
  51. *
  52. * @author Dean Tao
  53. * @version 1.0
  54. */
  55. public class BasicInfoEditActivity extends BaseActivity implements View.OnClickListener {
  56. private User mUser;
  57. // widget
  58. private ImageView mAvatarImg;
  59. private EditText mNameEdit;
  60. private TextView mBirthdayTv;
  61. private TextView mCityTv;
  62. private Button mNextStepBtn;
  63. private RadioButton rbBoy,rbGrid;
  64. // Temp
  65. private User mTempData;
  66. // 选择头像的数据
  67. private File mCurrentFile;
  68. private boolean isError = false;
  69. private ProgressDialog mProgressDialog;
  70. @Override
  71. protected void onCreate(Bundle savedInstanceState) {
  72. super.onCreate(savedInstanceState);
  73. mUser = MyApplication.getInstance().mLoginUser;
  74. if (!LoginHelper.isUserValidation(mUser)) {
  75. isError = true;
  76. return;
  77. }
  78. mProgressDialog = ProgressDialogUtil.init(mContext, null, getString(R.string.please_wait));
  79. setContentView(R.layout.activity_basic_info_edit);
  80. initView();
  81. }
  82. private void initView() {
  83. getSupportActionBar().setTitle(R.string.basic_info);
  84. mAvatarImg = (ImageView) findViewById(R.id.avatar_img);
  85. mNameEdit = (EditText) findViewById(R.id.name_edit);
  86. rbBoy= (RadioButton) findViewById(R.id.rb_boy);
  87. rbGrid= (RadioButton) findViewById(R.id.rb_grid);
  88. mBirthdayTv = (TextView) findViewById(R.id.birthday_tv);
  89. mCityTv = (TextView) findViewById(R.id.city_tv);
  90. mNextStepBtn = (Button) findViewById(R.id.next_step_btn);
  91. mAvatarImg.setOnClickListener(this);
  92. findViewById(R.id.sex_select_rl).setOnClickListener(this);
  93. findViewById(R.id.birthday_select_rl).setOnClickListener(this);
  94. findViewById(R.id.city_select_rl).setOnClickListener(this);
  95. mNextStepBtn.setOnClickListener(this);
  96. updateUI();
  97. }
  98. private void updateUI() {
  99. // clone一份临时数据,用来存数变化的值,返回的时候对比有无变化
  100. try {
  101. mTempData = (User) mUser.clone();
  102. } catch (CloneNotSupportedException e) {
  103. e.printStackTrace();
  104. }
  105. if (mTempData.getSex() == 1) {
  106. rbBoy.setChecked(true);
  107. } else {
  108. rbGrid.setChecked(true);
  109. }
  110. mBirthdayTv.setText(TimeUtils.sk_time_s_long_2_str(mTempData.getBirthday()));
  111. mNameEdit.setText(mTempData.getNickName());
  112. mCityTv.setText(Area.getProvinceCityString(mTempData.getProvinceId(), mTempData.getCityId()));
  113. AvatarHelper.getInstance().displayAvatar(mTempData.getUserId(), mAvatarImg, true);
  114. }
  115. @Override
  116. public void onClick(View v) {
  117. switch (v.getId()) {
  118. case R.id.avatar_img:
  119. showSelectAvatarDialog();
  120. break;
  121. case R.id.sex_select_rl:
  122. // showSelectSexDialog();
  123. break;
  124. case R.id.birthday_select_rl:
  125. showSelectBirthdayDialog();
  126. break;
  127. case R.id.city_select_rl:
  128. Intent intent = new Intent(BasicInfoEditActivity.this, SelectAreaActivity.class);
  129. intent.putExtra(SelectAreaActivity.EXTRA_AREA_TYPE, Area.AREA_TYPE_PROVINCE);
  130. intent.putExtra(SelectAreaActivity.EXTRA_AREA_PARENT_ID, Area.AREA_DATA_CHINA_ID);// 直接选择中国,
  131. intent.putExtra(SelectAreaActivity.EXTRA_AREA_DEEP, Area.AREA_TYPE_COUNTY);
  132. startActivityForResult(intent, 4);
  133. break;
  134. case R.id.next_step_btn:
  135. next();
  136. break;
  137. }
  138. }
  139. private void showSelectAvatarDialog() {
  140. String[] items = new String[]{getString(R.string.c_take_picture), getString(R.string.c_photo_album)};
  141. AlertDialog.Builder builder = new AlertDialog.Builder(this).setTitle(R.string.select_avatar).setSingleChoiceItems(items, 0,
  142. new DialogInterface.OnClickListener() {
  143. @Override
  144. public void onClick(DialogInterface dialog, int which) {
  145. if (which == 0) {
  146. takePhoto();
  147. } else {
  148. selectPhoto();
  149. }
  150. dialog.dismiss();
  151. }
  152. });
  153. builder.show();
  154. }
  155. private static final int REQUEST_CODE_CAPTURE_CROP_PHOTO = 1;
  156. private static final int REQUEST_CODE_PICK_CROP_PHOTO = 2;
  157. private static final int REQUEST_CODE_CROP_PHOTO = 3;
  158. private Uri mNewPhotoUri;
  159. private void takePhoto() {
  160. mNewPhotoUri = CameraUtil.getOutputMediaFileUri(this, CameraUtil.MEDIA_TYPE_IMAGE);
  161. CameraUtil.captureImage(this, mNewPhotoUri, REQUEST_CODE_CAPTURE_CROP_PHOTO);
  162. }
  163. private void selectPhoto() {
  164. CameraUtil.pickImageSimple(this, REQUEST_CODE_PICK_CROP_PHOTO);
  165. }
  166. @Override
  167. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  168. if (requestCode == REQUEST_CODE_CAPTURE_CROP_PHOTO) {// 拍照返回再去裁减
  169. if (resultCode == Activity.RESULT_OK) {
  170. if (mNewPhotoUri != null) {
  171. Uri o = mNewPhotoUri;
  172. mNewPhotoUri = CameraUtil.getOutputMediaFileUri(this, CameraUtil.MEDIA_TYPE_IMAGE);
  173. mCurrentFile = new File(mNewPhotoUri.getPath());
  174. CameraUtil.cropImage(this, o, mNewPhotoUri, REQUEST_CODE_CROP_PHOTO, 1, 1, 300, 300);
  175. } else {
  176. ToastUtil.showToast(this, R.string.c_photo_album_failed);
  177. }
  178. }
  179. } else if (requestCode == REQUEST_CODE_PICK_CROP_PHOTO) {// 选择一张图片,然后立即调用裁减
  180. if (resultCode == Activity.RESULT_OK) {
  181. if (data != null && data.getData() != null) {
  182. String path = CameraUtil.getImagePathFromUri(this, data.getData());
  183. Uri o = Uri.fromFile(new File(path));
  184. mNewPhotoUri = CameraUtil.getOutputMediaFileUri(this, CameraUtil.MEDIA_TYPE_IMAGE);
  185. mCurrentFile = new File(mNewPhotoUri.getPath());
  186. CameraUtil.cropImage(this, o, mNewPhotoUri, REQUEST_CODE_CROP_PHOTO, 1, 1, 300, 300);
  187. } else {
  188. ToastUtil.showToast(this, R.string.c_photo_album_failed);
  189. }
  190. }
  191. } else if (requestCode == REQUEST_CODE_CROP_PHOTO) {
  192. if (resultCode == Activity.RESULT_OK) {
  193. if (mNewPhotoUri != null) {
  194. mCurrentFile = new File(mNewPhotoUri.getPath());
  195. ImageLoader.getInstance().displayImage(mNewPhotoUri.toString(), mAvatarImg);
  196. } else {
  197. ToastUtil.showToast(this, R.string.c_crop_failed);
  198. }
  199. }
  200. } else if (requestCode == 4) {// 选择城市
  201. if (resultCode == RESULT_OK && data != null) {
  202. int countryId = data.getIntExtra(SelectAreaActivity.EXTRA_COUNTRY_ID, 0);
  203. int provinceId = data.getIntExtra(SelectAreaActivity.EXTRA_PROVINCE_ID, 0);
  204. int cityId = data.getIntExtra(SelectAreaActivity.EXTRA_CITY_ID, 0);
  205. int countyId = data.getIntExtra(SelectAreaActivity.EXTRA_COUNTY_ID, 0);
  206. // String country_name = data.getStringExtra(Constant.EXTRA_COUNTRY_NAME);
  207. String province_name = data.getStringExtra(SelectAreaActivity.EXTRA_PROVINCE_NAME);
  208. String city_name = data.getStringExtra(SelectAreaActivity.EXTRA_CITY_NAME);
  209. mCityTv.setText(province_name + "-" + city_name);
  210. mTempData.setCountryId(countryId);
  211. mTempData.setProvinceId(provinceId);
  212. mTempData.setCityId(cityId);
  213. mTempData.setAreaId(countyId);
  214. }
  215. }
  216. }
  217. private void showSelectSexDialog() {
  218. String[] sexs = new String[]{getString(R.string.sex_man), getString(R.string.sex_woman)};
  219. new AlertDialog.Builder(this).setTitle(getString(R.string.select_sex))
  220. .setSingleChoiceItems(sexs, mTempData.getSex() == 1 ? 0 : 1, new DialogInterface.OnClickListener() {
  221. @Override
  222. public void onClick(DialogInterface dialog, int which) {
  223. if (which == 0) {
  224. mTempData.setSex(1);
  225. // mSexTv.setText(R.string.sex_man);
  226. } else {
  227. mTempData.setSex(0);
  228. // mSexTv.setText(R.string.sex_woman);
  229. }
  230. dialog.dismiss();
  231. }
  232. }).setCancelable(true).create().show();
  233. }
  234. @SuppressWarnings("deprecation")
  235. private void showSelectBirthdayDialog() {
  236. Date date = new Date(mTempData.getBirthday() * 1000);
  237. DatePickerDialog dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
  238. @Override
  239. public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
  240. GregorianCalendar calendar = new GregorianCalendar(year, monthOfYear, dayOfMonth);
  241. mTempData.setBirthday(TimeUtils.getSpecialBeginTime(mBirthdayTv, calendar.getTime().getTime() / 1000));
  242. long currentTime = System.currentTimeMillis() / 1000;
  243. long birthdayTime = calendar.getTime().getTime() / 1000;
  244. if (birthdayTime > currentTime) {
  245. ToastUtil.showToast(mContext, "亲!您的出生日期已经超过现在了哦!");
  246. }
  247. }
  248. }, date.getYear() + 1900, date.getMonth(), date.getDate());
  249. dialog.show();
  250. }
  251. private void loadPageData() {
  252. mTempData.setNickName(mNameEdit.getText().toString().trim());
  253. }
  254. private void next() {
  255. if (rbBoy.isChecked()){
  256. mTempData.setSex(1);
  257. Log.i("gongpengming","选择男的");
  258. }else{
  259. mTempData.setSex(0);
  260. Log.i("gongpengming","选择女的");
  261. }
  262. if (!MyApplication.getInstance().isNetworkActive()) {
  263. ToastUtil.showToast(this, R.string.net_exception);
  264. return;
  265. }
  266. loadPageData();
  267. if (TextUtils.isEmpty(mTempData.getNickName())) {
  268. mNameEdit.requestFocus();
  269. mNameEdit.setError(StringUtils.editTextHtmlErrorTip(this, R.string.name_empty_error));
  270. return;
  271. }
  272. if (!StringUtils.isNickName(mTempData.getNickName())) {
  273. mNameEdit.requestFocus();
  274. mNameEdit.setError(StringUtils.editTextHtmlErrorTip(this, R.string.nick_name_format_error));
  275. return;
  276. }
  277. if (mTempData.getCityId() <= 0) {
  278. ToastUtil.showToast(mContext, R.string.live_address_empty_error);
  279. return;
  280. }
  281. if (mUser != null && !mUser.equals(mTempData)) {// 数据改变了,提交数据
  282. Log.d("wang", "数据改变了,提交数据");
  283. updateData();
  284. }
  285. if (mCurrentFile != null && mCurrentFile.exists()) {
  286. Log.d("wang", "uploadAvatar");
  287. uploadAvatar(mCurrentFile);
  288. }
  289. }
  290. private void updateData() {
  291. HashMap<String, String> params = new HashMap<String, String>();
  292. params.put("access_token", MyApplication.getInstance().mAccessToken);
  293. if (!mUser.getNickName().equals(mTempData.getNickName())) {
  294. params.put("nickname", mTempData.getNickName());
  295. }
  296. if (mUser.getSex() != mTempData.getSex()) {
  297. params.put("sex", String.valueOf(mTempData.getSex()));
  298. }
  299. if (mUser.getBirthday() != mTempData.getBirthday()) {
  300. params.put("birthday", String.valueOf(mTempData.getBirthday()));
  301. }
  302. if (mUser.getCountryId() != mTempData.getCountryId()) {
  303. params.put("countryId", String.valueOf(mTempData.getCountryId()));
  304. }
  305. if (mUser.getProvinceId() != mTempData.getProvinceId()) {
  306. params.put("provinceId", String.valueOf(mTempData.getProvinceId()));
  307. }
  308. if (mUser.getCityId() != mTempData.getCityId()) {
  309. params.put("cityId", String.valueOf(mTempData.getCityId()));
  310. }
  311. if (mUser.getAreaId() != mTempData.getAreaId()) {
  312. params.put("areaId", String.valueOf(mTempData.getAreaId()));
  313. }
  314. ProgressDialogUtil.show(mProgressDialog);
  315. StringJsonObjectRequest<Void> request = new StringJsonObjectRequest<Void>(mConfig.USER_UPDATE, new ErrorListener() {
  316. @Override
  317. public void onErrorResponse(VolleyError arg0) {
  318. ProgressDialogUtil.dismiss(mProgressDialog);
  319. ToastUtil.showErrorNet(BasicInfoEditActivity.this);
  320. }
  321. }, new StringJsonObjectRequest.Listener<Void>() {
  322. @Override
  323. public void onResponse(ObjectResult<Void> result) {
  324. boolean success = Result.defaultParser(mContext, result, true);
  325. if (success) {
  326. saveData();
  327. } else {
  328. ProgressDialogUtil.dismiss(mProgressDialog);
  329. }
  330. }
  331. }, Void.class, params);
  332. addDefaultRequest(request);
  333. }
  334. private void saveData() {
  335. if (!mUser.getNickName().equals(mTempData.getNickName())) {
  336. Log.d("wang", "更新数据库" + mTempData.getNickName());
  337. MyApplication.getInstance().mLoginUser.setNickName(mTempData.getNickName());
  338. UserDao.getInstance().updateNickName(mTempData.getUserId(), mTempData.getNickName());// 更新数据库
  339. }
  340. if (mUser.getSex() != mTempData.getSex()) {
  341. MyApplication.getInstance().mLoginUser.setSex(mTempData.getSex());
  342. UserDao.getInstance().updateSex(mTempData.getUserId(), mTempData.getSex() + "");// 更新数据库
  343. }
  344. if (mUser.getBirthday() != mTempData.getBirthday()) {
  345. MyApplication.getInstance().mLoginUser.setBirthday(mTempData.getBirthday());
  346. UserDao.getInstance().updateBirthday(mTempData.getUserId(), mTempData.getBirthday() + "");// 更新数据库
  347. }
  348. if (mUser.getCountryId() != mTempData.getCountryId()) {
  349. MyApplication.getInstance().mLoginUser.setCountryId(mTempData.getCountryId());
  350. UserDao.getInstance().updateCountryId(mTempData.getUserId(), mTempData.getCountryId());
  351. }
  352. if (mUser.getProvinceId() != mTempData.getProvinceId()) {
  353. MyApplication.getInstance().mLoginUser.setProvinceId(mTempData.getProvinceId());
  354. UserDao.getInstance().updateProvinceId(mTempData.getUserId(), mTempData.getProvinceId());
  355. }
  356. if (mUser.getCityId() != mTempData.getCityId()) {
  357. MyApplication.getInstance().mLoginUser.setCityId(mTempData.getCityId());
  358. UserDao.getInstance().updateCityId(mTempData.getUserId(), mTempData.getCityId());
  359. }
  360. if (mUser.getAreaId() != mTempData.getAreaId()) {
  361. MyApplication.getInstance().mLoginUser.setAreaId(mTempData.getAreaId());
  362. UserDao.getInstance().updateAreaId(mTempData.getUserId(), mTempData.getAreaId());
  363. }
  364. if (mCurrentFile != null && mCurrentFile.exists()) {
  365. uploadAvatar(mCurrentFile);
  366. } else {
  367. ProgressDialogUtil.dismiss(mProgressDialog);
  368. setResult(RESULT_OK);
  369. finish();
  370. }
  371. }
  372. @Override
  373. public void onBackPressed() {
  374. doBack();
  375. }
  376. @Override
  377. protected boolean onHomeAsUp() {
  378. doBack();
  379. return true;
  380. }
  381. private void doBack() {
  382. if (isError) {
  383. super.onBackPressed();
  384. return;
  385. }
  386. loadPageData();
  387. if ((mUser != null && !mUser.equals(mTempData)) || (mCurrentFile != null && mCurrentFile.exists())) {
  388. showBackDialog();
  389. } else {
  390. finish();
  391. }
  392. }
  393. private void showBackDialog() {
  394. AlertDialog.Builder builder = new AlertDialog.Builder(this).setTitle(R.string.prompt_title).setMessage(R.string.cancel_edit_prompt)
  395. .setNegativeButton(getString(R.string.no), null).setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
  396. @Override
  397. public void onClick(DialogInterface dialog, int which) {
  398. setResult(RESULT_OK);
  399. finish();
  400. }
  401. });
  402. builder.create().show();
  403. }
  404. private void uploadAvatar(File file) {
  405. if (!file.exists()) {// 文件不存在
  406. return;
  407. }
  408. // 显示正在上传的ProgressDialog
  409. ProgressDialogUtil.show(mProgressDialog, getString(R.string.upload_avataring));
  410. RequestParams params = new RequestParams();
  411. final String loginUserId = MyApplication.getInstance().mLoginUser.getUserId();
  412. params.put("userId", loginUserId);
  413. try {
  414. params.put("file1", file);
  415. } catch (FileNotFoundException e) {
  416. e.printStackTrace();
  417. }
  418. AsyncHttpClient client = new AsyncHttpClient();
  419. client.post(mConfig.AVATAR_UPLOAD_URL, params, new AsyncHttpResponseHandler() {
  420. @Override
  421. public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
  422. boolean success = false;
  423. if (arg0 == 200) {
  424. Result result = null;
  425. try {
  426. result = JSON.parseObject(new String(arg2), Result.class);
  427. } catch (Exception e) {
  428. e.printStackTrace();
  429. }
  430. if (result != null && result.getResultCode() == Result.CODE_SUCCESS) {
  431. success = true;
  432. }
  433. }
  434. ProgressDialogUtil.dismiss(mProgressDialog);
  435. if (success) {
  436. AvatarHelper.getInstance().deleteAvatar(loginUserId);
  437. ToastUtil.showToast(BasicInfoEditActivity.this, R.string.upload_avatar_success);
  438. } else {
  439. ToastUtil.showToast(BasicInfoEditActivity.this, R.string.upload_avatar_failed);
  440. }
  441. finish();
  442. }
  443. @Override
  444. public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
  445. ProgressDialogUtil.dismiss(mProgressDialog);
  446. ToastUtil.showToast(BasicInfoEditActivity.this, R.string.upload_avatar_failed);
  447. }
  448. });
  449. }
  450. }