package net.basilwang; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.basilwang.dao.Preferences; import net.basilwang.entity.ValidateResult; import net.basilwang.utils.NetworkUtils; import net.basilwang.utils.PreferenceUtils; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnFocusChangeListener; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.Toast; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; public class RegisterActivity extends Activity implements OnFocusChangeListener, OnClickListener { private EditText r_name, r_email, r_psw, r_rpsw, r_phone, r_answer; private List<EditText> edit = new ArrayList<EditText>(); private Spinner r_question; private Button r_register; ProgressBar progress; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.register_activity); init(); } public void init() { r_name = (EditText) findViewById(R.id.register_user); edit.add(r_name); r_name.setOnFocusChangeListener(this); r_email = (EditText) findViewById(R.id.register_email); edit.add(r_email); r_email.setOnFocusChangeListener(this); r_psw = (EditText) findViewById(R.id.register_password); edit.add(r_psw); r_psw.setOnFocusChangeListener(this); r_rpsw = (EditText) findViewById(R.id.register_verify_password); r_rpsw.setOnFocusChangeListener(this); r_phone = (EditText) findViewById(R.id.register_phone); r_question = (Spinner) findViewById(R.id.register_spinner); r_answer = (EditText) findViewById(R.id.register_answer); edit.add(r_answer); r_register = (Button) findViewById(R.id.register_button); r_register.setOnClickListener(this); progress = (ProgressBar) findViewById(R.id.progressBar); progress.setVisibility(View.INVISIBLE); } private boolean isNetAvailable() { return NetworkUtils.isConnect(this) ? true : false; } public boolean checkEditText() { for (int i = 0; i < edit.size(); i++) { if (edit.get(i).getText().toString().equals("")) { return false; } } return true; } @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus == false) { switch (v.getId()) { case R.id.register_user: if (r_name.getText().length() < 2 || r_name.getText().length() > 10) Toast.makeText(this, "用户名应为2-10个字符", Toast.LENGTH_SHORT); break; case R.id.register_password: if (r_psw.getText().length() < 6 || r_psw.getText().length() > 18) { Toast.makeText(this, "密码应为6-18个字符", Toast.LENGTH_SHORT) .show(); } break; case R.id.register_verify_password: if (!r_rpsw.getText().toString() .equals(r_psw.getText().toString())) { Toast.makeText(this, "两次输入密码不一致", Toast.LENGTH_SHORT) .show(); } break; case R.id.register_email: isEmail(r_email.getText().toString().trim()); break; } } } // 判断email格式是否正确 public boolean isEmail(String email) { String str = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"; Pattern p = Pattern.compile(str); Matcher m = p.matcher(email); if (!m.matches()) { Toast.makeText(this, "邮箱格式不正确!", Toast.LENGTH_SHORT).show(); } return m.matches(); } @Override public void onClick(View v) { if (checkEditText() && isNetAvailable()) { Register register = new Register(); register.execute(r_name.getText().toString().trim(), r_psw .getText().toString().trim(), r_email.getText().toString() .trim(), r_phone.getText().toString().trim(), r_question .getSelectedItem().toString().trim(), r_answer.getText() .toString().trim()); } else if (!isNetAvailable()) { Toast.makeText(RegisterActivity.this, "请连接网络", Toast.LENGTH_LONG) .show(); } else { Toast.makeText(RegisterActivity.this, "注册信息不完整,*为必填项", Toast.LENGTH_LONG).show(); } } class Register extends AsyncTask<Object, Object, ValidateResult> { private String name, psw, email, phone, question, answer; @Override protected void onProgressUpdate(Object... values) { super.onProgressUpdate(values); progress.setVisibility(View.VISIBLE); } @Override protected void onPostExecute(ValidateResult result) { progress.setVisibility(View.INVISIBLE); String str = result.getSuccess(); if (str.equals("true")) { RegisterActivity.this.finish(); LoginActivity.instance.finish(); PreferenceUtils.modifyStringValueInPreferences( RegisterActivity.this, net.basilwang.dao.Preferences.TOKEN, result.getToken()); PreferenceUtils.modifyStringValueInPreferences( RegisterActivity.this, Preferences.USER_NAME, name); Intent intent = new Intent(RegisterActivity.this, StaticAttachmentActivity.class); startActivity(intent); } else { String toast = result.getMessage().replace("<br/>", "\n"); Toast.makeText(RegisterActivity.this, toast, Toast.LENGTH_LONG) .show(); } super.onPostExecute(result); } @Override protected ValidateResult doInBackground(Object... params) { ValidateResult v_result = new ValidateResult(); name = (String) params[0]; psw = (String) params[1]; email = (String) params[2]; phone = (String) params[3]; question = (String) params[4]; answer = (String) params[5]; publishProgress(); HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost( "http://www.ruguozhai.me/api/users/Register"); List<NameValuePair> postParameters = new ArrayList<NameValuePair>(); postParameters.add(new BasicNameValuePair("loginName", name)); postParameters.add(new BasicNameValuePair("password", psw)); postParameters.add(new BasicNameValuePair("email", email)); postParameters.add(new BasicNameValuePair("telPhone", phone)); postParameters.add(new BasicNameValuePair("question", question)); postParameters.add(new BasicNameValuePair("answer", answer)); try { UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity( postParameters, HTTP.UTF_8); post.setEntity(formEntity); HttpResponse response = client.execute(post); Log.v("result", "code=" + response.getStatusLine().getStatusCode()); if (response.getStatusLine().getStatusCode() == 200) { String result = filter(EntityUtils.toString(response .getEntity())); Log.v("result", "result=" + result); v_result = jsonData(result); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return v_result; } public String filter(String s) { String s1 = s.replace("\\r", ""); String s2 = s1.replace("\\n", ""); String s3 = s2.substring(1, s2.length() - 1); String s4 = s3.replace(" ", ""); String result = s4.replace("\\", ""); return result; } public ValidateResult jsonData(String str) { ValidateResult result = JSON.parseObject(str, new TypeReference<ValidateResult>() { }); return result; } } }