完成登陆实例
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/loginRoot"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white1"
android:orientation="vertical" >
<include layout="@layout/header_account_bar" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="30dp"
android:layout_marginBottom="20dp"
android:background="@drawable/login_chart"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
<TextView
style="@style/account_register_textview"
android:text="@string/account_name" />
<EditText
android:id="@+id/name_text"
style="@style/account_register_edittext" />
</LinearLayout>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/login_chart_line" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
<TextView
style="@style/account_register_textview"
android:text="@string/account_pwd" />
<EditText
android:id="@+id/password_text"
style="@style/account_register_edittext"
android:password="true" />
</LinearLayout>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/login_chart_line" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:orientation="horizontal" >
<TextView
style="@style/account_register_textview"
android:layout_gravity="center_vertical"
android:text="@string/register_account_type" />
<RelativeLayout style="@style/account_register_edittext" >
<EditText
android:id="@+id/type_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:singleLine="true"
android:text="@string/register_account_type_default"
android:textColor="@color/textcolor" />
<ImageButton
android:id="@+id/type_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/type_text"
android:layout_alignRight="@+id/type_text"
android:layout_alignTop="@+id/type_text"
android:layout_marginBottom="2dp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:background="@drawable/register_more_select" />
</RelativeLayout>
</LinearLayout>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/login_chart_line"
android:visibility="gone" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:orientation="horizontal" >
<CheckBox
android:id="@+id/login_cb_savepwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginBottom="10dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="10dp"
android:button="@drawable/cpse_btn_check"
android:checked="true"
android:text="@string/save_pwd"
android:textColor="@color/textcolor"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp" >
<Button
android:id="@+id/login_btn_register"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/new_account"
android:text="@string/account_register"
android:textColor="@color/textcolor"
android:textSize="18sp" />
<!--
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/login_btn_register"
android:layout_alignRight="@+id/login_btn_register"
android:layout_alignTop="@+id/login_btn_register"
android:layout_marginBottom="2dp"
android:layout_marginRight="1dp"
android:layout_marginTop="1dp"
android:background="@drawable/regist_goto" />
-->
</RelativeLayout>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/bg_line" />
<Button
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:background="@drawable/register_finish_button"
android:text="@string/login"
android:textColor="@color/white1"
android:textSize="22sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
AccountItem.java
import java.io.Serializable;
public class AccountItem implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String username;
private String email;
private String type;
private String truename;
private String password;
private String repwd;
private String country;
private String company;
private String job;
private String productRange;
private String department;
private String mobile;
private String qc_url;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getTruename() {
return truename;
}
public void setTruename(String truename) {
this.truename = truename;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRepwd() {
return repwd;
}
public void setRepwd(String repwd) {
this.repwd = repwd;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getProductRange() {
return productRange;
}
public void setProductRange(String productRange) {
this.productRange = productRange;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public String getQc_url() {
return qc_url;
}
public void setQc_url(String qc_url) {
this.qc_url = qc_url;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
@Override
public String toString() {
String tmp = "Account : id = "+id+";username = "+username +";company = "+company;
return tmp;
}
}
AccountLoginActivity.java
package com.cps.media.ui.account;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
import com.cps.media.R;
import com.cps.media.model.AccountItem;
import com.cps.media.model.ExhibitorItem;
import com.cps.media.ui.LoadingActivity;
import com.cps.media.ui.exhibitors.ExhibitorActivity;
import com.cps.media.util.CONST;
import com.cps.media.util.Util;
public class AccountLoginActivity extends Activity implements
View.OnClickListener, OnTouchListener {
private String TAG = "AccountLoginActivity";
private ImageButton mBackImageButton;
private Button mRegisterButton;
private EditText mTypeEditText;
private EditText mNameEditText;
private EditText mPwdEditText;
private ImageButton mTypeSelectButton;
private AccountItem mAccount;
private Button mLoginButton;
private SharedPreferences mConfig;
private CheckBox mSaveAccountCheckBox;
private Intent mIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_account_login);
mConfig = this.getSharedPreferences(Util.CONFIG_FILE, MODE_PRIVATE);
mAccount = new AccountItem();
//set default account type
String[] values = getResources().getStringArray(
R.array.account_type_value);
mAccount.setType(values[0]);
mIntent = new Intent(this,LoadingActivity.class);
mSaveAccountCheckBox = (CheckBox) findViewById(R.id.login_cb_savepwd);
mSaveAccountCheckBox.setOnClickListener(this);
mBackImageButton = (ImageButton) findViewById(R.id.btn_newscontent_back);
mBackImageButton.setOnClickListener(this);
mRegisterButton = (Button) findViewById(R.id.login_btn_register);
mRegisterButton.setOnClickListener(this);
mTypeEditText = (EditText) findViewById(R.id.type_text);
mTypeEditText.setOnClickListener(this);
mTypeEditText.setOnTouchListener(this);
mTypeSelectButton = (ImageButton) findViewById(R.id.type_button);
mTypeSelectButton.setOnClickListener(this);
mNameEditText = (EditText) findViewById(R.id.name_text);
mPwdEditText = (EditText) findViewById(R.id.password_text);
mLoginButton = (Button) findViewById(R.id.login_button);
mLoginButton.setOnClickListener(this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//如果上次有记住账号密码,则在此处赋值显示出来
String[] values = getResources().getStringArray(
R.array.account_type_value);
if(mConfig.contains("issave")){
if(mConfig.getBoolean("issave", false)){
mAccount.setId(mConfig.getInt("id", 0));
mAccount.setUsername(mConfig.getString("name", ""));
mAccount.setPassword(mConfig.getString("pwd", ""));
mAccount.setEmail(mConfig.getString("email", ""));
mAccount.setType(mConfig.getString("type", values[0]));
mNameEditText.setText(mAccount.getUsername());
mPwdEditText.setText(mAccount.getPassword());
mSaveAccountCheckBox.setChecked(true);
String[] types = getResources().getStringArray(
R.array.account_type); // array
int tmp = 0;
for (int j = 0; j < values.length; j++) {
if (values[j].toString().trim().equals(mConfig.getString("type", values[0]))) {
tmp = j;
break;
}
}
mTypeEditText.setText(types[tmp]);
}else{
mSaveAccountCheckBox.setChecked(false);
}
}else{
mSaveAccountCheckBox.setChecked(true);
SharedPreferences.Editor editor = mConfig.edit();
editor.putBoolean("issave", mSaveAccountCheckBox.isChecked());
editor.commit();
}
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.btn_newscontent_back:
backKey();
break;
case R.id.login_btn_register:
Intent intent = new Intent(this, AccountRegisterActivity.class);
startActivity(intent);
finish();
overridePendingTransition(R.anim.news_dync_in_from_right, R.anim.news_dync_out_to_left);
break;
case R.id.type_button:
showChooseTypeDialog();
break;
case R.id.login_button:
String name = mNameEditText.getText().toString().trim();
String pwd = mPwdEditText.getText().toString().trim();
if (name == null || name.equals("") || pwd == null
|| pwd.equals("")) {
Toast.makeText(AccountLoginActivity.this, getResources().getString(R.string.notify_name_pwd), Toast.LENGTH_SHORT)
.show();
return;
}
mLoginButton.setEnabled(false);
mAccount.setUsername(mNameEditText.getText().toString().trim());
mAccount.setPassword(mPwdEditText.getText().toString().trim());
submitData();
break;
case R.id.login_cb_savepwd:
SharedPreferences.Editor editor = mConfig.edit();
if(!mSaveAccountCheckBox.isChecked()){
editor.clear();
}
editor.putBoolean("issave", mSaveAccountCheckBox.isChecked());
editor.commit();
break;
default:
break;
}
}
private void submitData() {
mIntent.putExtra(Util.ACCOUNT_TYPE, Util.ACCOUNT_LOGIN_VALUE);
startActivity(mIntent);
Thread t = new Thread() {
@Override
public void run() {
super.run();
HttpClient client = new DefaultHttpClient();
StringBuilder builder = new StringBuilder();
int error = 1;
String url = CONST.URL_ACCOUNT_LOGIN;
try {
url = url.replace("{0}", URLEncoder.encode(mAccount.getUsername(),CONST.URL_ENCODING_UTF_8));
url = url.replace("{1}", URLEncoder.encode(mAccount.getPassword(),CONST.URL_ENCODING_UTF_8));
url = url.replace("{2}", URLEncoder.encode(mAccount.getType(),CONST.URL_ENCODING_UTF_8));
} catch (Exception e) {
e.printStackTrace();
}
Log.d(TAG,"url = "+ url);
HttpGet myget = new HttpGet(url);
try {
HttpResponse response = client.execute(myget);
BufferedReader reader = new BufferedReader(
new InputStreamReader(response.getEntity()
.getContent()));
for (String s = reader.readLine(); s != null; s = reader
.readLine()) {
builder.append(s);
}
JSONObject jsonObject = new JSONObject(builder.toString());
error = jsonObject.getInt("errno");
String errormsg = jsonObject.getString("errmsg");
Log.v("wgp", "error=" + error);
Log.v("wgp", "errormsg=" + errormsg);
if (error == 0) {
mAccount.setId(jsonObject.getJSONObject("data").getInt("userid"));
mAccount.setEmail(jsonObject.getJSONObject("data").getString("email"));
try {
mAccount.setQc_url(jsonObject.getJSONObject("data").getString("qc_url"));
} catch (Exception e) {
Log.d(TAG,"user have no qc_url");
}
handler.sendEmptyMessage(1);
}else{
handler.sendEmptyMessage(-1);
}
} catch (Exception e) {
e.printStackTrace();
handler.sendEmptyMessage(-1);
} finally {
}
}
};
t.start();
}
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
Intent intent = new Intent(Util.LOADING_BROADCAST_RECIVER);
sendBroadcast(intent);
if(msg.what == 1){
SharedPreferences.Editor editor = mConfig.edit();
Log.d(TAG, mAccount.toString());
if(mSaveAccountCheckBox.isChecked()){
//写入需要记住的信息
editor.putInt("id", mAccount.getId());
editor.putString("name", mAccount.getUsername());
editor.putString("pwd", mAccount.getPassword());
editor.putString("email", mAccount.getEmail());
editor.putString("type", mAccount.getType());
editor.putString("qc_url", mAccount.getQc_url());
editor.commit();
}
AccountManager.getInstance().setAccount(mAccount);
Toast.makeText(AccountLoginActivity.this, getResources().getString(R.string.welcome), Toast.LENGTH_SHORT).show();
goAccountCenter();
}else if(msg.what == -1){
Toast.makeText(AccountLoginActivity.this, getResources().getString(R.string.login_failure), Toast.LENGTH_SHORT).show();
}
mLoginButton.setEnabled(true);
// sendBroadcast(mIntent);
};
};
private void goAccountCenter(){
if(mAccount.getType().equals(AccountManager.TYPE_USER)){
ExhibitorItem item = new ExhibitorItem();
item.setId(mAccount.getId());
Intent intent = new Intent(this,ExhibitorActivity.class);
intent.putExtra("exhibitor_item",item);
intent.putExtra("scan", true);
startActivity(intent);
finish();
//切换时的动画
overridePendingTransition(R.anim.news_dync_in_from_right,R.anim.news_dync_out_to_left);
}else if(mAccount.getType().equals(AccountManager.TYPE_VIEWER)){
Intent intent = new Intent(AccountLoginActivity.this,AccountCenterActivity.class);
startActivity(intent);
finish();
overridePendingTransition(R.anim.news_dync_in_from_right,R.anim.news_dync_out_to_left);
}
}
private void backKey() {
setResult(RESULT_OK);
finish();
overridePendingTransition(R.anim.news_dync_in_from_left,R.anim.news_dync_out_to_right);
}
private void showChooseTypeDialog() {
final String[] types = getResources().getStringArray(
R.array.account_type); // array
final String[] values = getResources().getStringArray(
R.array.account_type_value);
String defualt = mTypeEditText.getText().toString();
int tmp = 0;
for (int j = 0; j < types.length; j++) {
if (types[j].toString().trim().equals(defualt)) {
tmp = j;
break;
}
}
//弹出对话框选择类型
new AlertDialog.Builder(AccountLoginActivity.this)
.setTitle("请选择用户类别")
//单选
.setSingleChoiceItems(types, tmp,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
mTypeEditText.setText(types[which]);
mAccount.setType(values[which]);
dialog.dismiss();
}
}).show();
}
//xml类型选择的touch事件
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
int id = v.getId();
switch (id) {
case R.id.type_text:
showChooseTypeDialog();
break;
default:
break;
}
}
return false;
}
}