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.entity.ValidateResult;
import net.basilwang.utils.NetworkUtils;
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 com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
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.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.content.Intent;
public class ForgetPswActivity extends Activity implements OnClickListener,
OnFocusChangeListener {
View get, answer;
Button get_question, answerCommit;
TextView textQuestion;
EditText editUser, editEmail, editAnswer, editNewPsw, editNewPswVeri;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.forget_psw_activity);
initView();
get_question.setOnClickListener(this);
answerCommit.setOnClickListener(this);
}
private void initView() {
editUser = (EditText) findViewById(R.id.forget_get_user);
editEmail = (EditText) findViewById(R.id.forget_get_email);
editAnswer = (EditText) findViewById(R.id.forget_psw_answer);
editNewPsw = (EditText) findViewById(R.id.forget_psw_newpsw);
editNewPswVeri = (EditText) findViewById(R.id.forget_psw_verify_newpsw);
textQuestion = (TextView) findViewById(R.id.forget_psw_question);
get_question = (Button) findViewById(R.id.forget_get_question);
answerCommit = (Button) findViewById(R.id.forget_psw_answer_commit);
get = (View) findViewById(R.id.get_question);
answer = (View) findViewById(R.id.forget_answer);
}
private boolean isNetAvailable() {
return NetworkUtils.isConnect(this) ? true : false;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.forget_get_question:
if(isEmail(editEmail.getText().toString())){
getQuestion();
get.setVisibility(View.GONE);
answer.setVisibility(View.VISIBLE);
}
break;
case R.id.forget_psw_answer_commit:
commitNewPsw();
break;
}
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus == false) {
switch (v.getId()) {
case R.id.forget_get_email:
if (!isEmail(editEmail.getText().toString().trim())) {
Toast.makeText(this, "邮箱格式不正确", Toast.LENGTH_SHORT).show();
}
break;
case R.id.forget_psw_newpsw:
if (editNewPsw.getText().length() > 18
|| editNewPsw.getText().length() < 6) {
Toast.makeText(this, "密码为6-18个字符", Toast.LENGTH_SHORT)
.show();
}
break;
}
}
}
public void getQuestion() {
if (isNetAvailable()) {
GetQuestion question = new GetQuestion();
question.execute(editUser.getText().toString().trim(), editEmail
.getText().toString().trim());
}
}
public void commitNewPsw() {
if (isNetAvailable()) {
NewPsw psw = new NewPsw();
psw.execute(editUser.getText().toString().trim(), editAnswer
.getText().toString().trim(), editNewPsw.getText()
.toString().trim());
}
}
// 判断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();
}
class GetQuestion extends AsyncTask<Object, Object, ValidateResult> {
String user, email;
@Override
protected void onPostExecute(ValidateResult result) {
if (result.getSuccess().equals("true")) {
textQuestion.setText(result.message);
} else {
Toast.makeText(ForgetPswActivity.this, result.message,
Toast.LENGTH_SHORT).show();
}
super.onPostExecute(result);
}
@Override
protected ValidateResult doInBackground(Object... params) {
user = (String) params[0];
email = (String) params[1];
ValidateResult v_result = new ValidateResult();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(
"http://www.ruguozhai.me/api/users/GetQuestion");
List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("loginName", user));
postParameters.add(new BasicNameValuePair("email", email));
UrlEncodedFormEntity formEntity;
try {
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;
}
}
class NewPsw extends AsyncTask<Object, Object, ValidateResult> {
@Override
protected void onPostExecute(ValidateResult result) {
if (result.getSuccess().equals("true")) {
ForgetPswActivity.this.finish();
LoginActivity.instance.finish();
Intent intent = new Intent(ForgetPswActivity.this,
LoginActivity.class);
startActivity(intent);
} else {
Toast.makeText(ForgetPswActivity.this, result.getMessage(),
Toast.LENGTH_SHORT).show();
}
super.onPostExecute(result);
}
String user, answer, newPsw;
@Override
protected ValidateResult doInBackground(Object... params) {
user = (String) params[0];
answer = (String) params[1];
newPsw = (String) params[2];
ValidateResult v_result = new ValidateResult();
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(
"http://www.ruguozhai.me/api/users/ResetPsdByQu");
List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("loginName", user));
postParameters.add(new BasicNameValuePair("answer", answer));
postParameters.add(new BasicNameValuePair("newPsd", newPsw));
UrlEncodedFormEntity formEntity;
try {
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;
}
}
}