Android开发学习之SQLite优化后如何记住密码

来源:爱站网时间:2022-04-27编辑:网友分享
这篇文章主要为大家详细介绍Android开发学习之SQLite优化后如何记住密码,这篇文章具有一定的参考价值,感兴趣的小伙伴们可以随爱站技术频道小编来了解了解下。

本文实例为大家分享了Android SQLite优化记住密码功能的具体代码,供大家参考,具体内容如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

package com.example.alimjan.hello_world;

 

/**

 * Created by alimjan on 7/4/2017.

 */

 

  import com.example.alimjan.hello_world.bean.UserInfo;

  import com.example.alimjan.hello_world.dataBase.UserDBHelper;

  import com.example.alimjan.hello_world.Utils.DateUtil;

 

 

  import android.app.AlertDialog;

  import android.content.Context;

  import android.content.DialogInterface;

  import android.content.Intent;

  import android.os.Bundle;

  import android.support.v7.app.AppCompatActivity;

  import android.text.Editable;

  import android.text.TextWatcher;

  import android.util.Log;

  import android.view.View;

  import android.view.View.OnClickListener;

  import android.view.View.OnFocusChangeListener;

  import android.widget.AdapterView;

  import android.widget.ArrayAdapter;

  import android.widget.Button;

  import android.widget.CheckBox;

  import android.widget.CompoundButton;

  import android.widget.EditText;

  import android.widget.RadioButton;

  import android.widget.RadioGroup;

  import android.widget.Spinner;

  import android.widget.TextView;

  import android.widget.Toast;

  import android.widget.AdapterView.OnItemSelectedListener;

 

 

public class class_4_2_3 extends AppCompatActivity implements OnClickListener, OnFocusChangeListener {

 

 private RadioGroup rg_login;

 private RadioButton rb_password;

 private RadioButton rb_verifycode;

 private EditText et_phone;

 private TextView tv_password;

 private EditText et_password;

 private Button btn_forget;

 private CheckBox ck_remember;

 private Button btn_login;

 

 private int mRequestCode = 0;

 private int mType = 0;

 private boolean bRemember = false;

 private String mPassword = "111111";

 private String mVerifyCode;

 private UserDBHelper mHelper;

 

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.code_4_2_3);

  rg_login = (RadioGroup) findViewById(R.id.rg_login);

  rb_password = (RadioButton) findViewById(R.id.rb_password);

  rb_verifycode = (RadioButton) findViewById(R.id.rb_verifycode);

  et_phone = (EditText) findViewById(R.id.et_phone);

  tv_password = (TextView) findViewById(R.id.tv_password);

  et_password = (EditText) findViewById(R.id.et_password);

  btn_forget = (Button) findViewById(R.id.btn_forget);

  ck_remember = (CheckBox) findViewById(R.id.ck_remember);

  btn_login = (Button) findViewById(R.id.btn_login);

 

  rg_login.setOnCheckedChangeListener(new RadioListener());

  ck_remember.setOnCheckedChangeListener(new CheckListener());

  et_phone.addTextChangedListener(new HideTextWatcher(et_phone));

  et_password.addTextChangedListener(new HideTextWatcher(et_password));

  btn_forget.setOnClickListener(this);

  btn_login.setOnClickListener(this);

  et_password.setOnFocusChangeListener(this);

 

  ArrayAdapter<String> typeAdapter = new ArrayAdapter<String>(this,

    R.layout.item_select, typeArray);

  typeAdapter.setDropDownViewResource(R.layout.item_dropdown);

  Spinner sp_type = (Spinner) findViewById(R.id.sp_type);

  sp_type.setPrompt("请选择用户类型");

  sp_type.setAdapter(typeAdapter);

  sp_type.setSelection(mType);

  sp_type.setOnItemSelectedListener(new TypeSelectedListener());

 }

 

 private class RadioListener implements RadioGroup.OnCheckedChangeListener {

  @Override

  public void onCheckedChanged(RadioGroup group, int checkedId) {

   if (checkedId == R.id.rb_password) {

    tv_password.setText("登录密码:");

    et_password.setHint("请输入密码");

    btn_forget.setText("忘记密码");

    ck_remember.setVisibility(View.VISIBLE);

   } else if (checkedId == R.id.rb_verifycode) {

    tv_password.setText(" 验证码:");

    et_password.setHint("请输入验证码");

    btn_forget.setText("获取验证码");

    ck_remember.setVisibility(View.INVISIBLE);

   }

  }

 }

 

 private String[] typeArray = {"个人用户", "公司用户"};

 class TypeSelectedListener implements OnItemSelectedListener {

  public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

   mType = arg2;

  }

 

  public void onNothingSelected(AdapterView<?> arg0) {

  }

 }

 

 private class CheckListener implements CompoundButton.OnCheckedChangeListener {

  @Override

  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

   if (buttonView.getId() == R.id.ck_remember) {

    bRemember = isChecked;

   }

  }

 }

 

 private class HideTextWatcher implements TextWatcher {

  private EditText mView;

  private int mMaxLength;

  private CharSequence mStr;

 

  public HideTextWatcher(EditText v) {

   super();

   mView = v;

   mMaxLength = ViewUtil.getMaxLength(v);

  }

 

  @Override

  public void beforeTextChanged(CharSequence s, int start, int count, int after) {

  }

 

  @Override

  public void onTextChanged(CharSequence s, int start, int before, int count) {

   mStr = s;

  }

 

  @Override

  public void afterTextChanged(Editable s) {

   if (mStr == null || mStr.length() == 0)

    return;

   if ((mStr.length() == 11 && mMaxLength == 11) ||

     (mStr.length() == 6 && mMaxLength == 6)) {

    ViewUtil.hideOneInputMethod(class_4_2_3.this, mView);

   }

  }

 }

 

 @Override

 public void onClick(View v) {

  String phone = et_phone.getText().toString();

  if (v.getId() == R.id.btn_forget) {

   if (phone==null || phone.length()<11) {

    Toast.makeText(this, "请输入正确的手机号", Toast.LENGTH_SHORT).show();

    return;

   }

   if (rb_password.isChecked() == true) {

    Intent intent = new Intent(this, class_4_2_3_1.class);

    intent.putExtra("phone", phone);

    startActivityForResult(intent, mRequestCode);

   } else if (rb_verifycode.isChecked() == true) {

    mVerifyCode = String.format("%06d", (int)(Math.random()*1000000%1000000));

    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    builder.setTitle("请记住验证码");

    builder.setMessage("手机号"+phone+",本次验证码是"+mVerifyCode+",请输入验证码");

    builder.setPositiveButton("好的", null);

    AlertDialog alert = builder.create();

    alert.show();

   }

  } else if (v.getId() == R.id.btn_login) {

   if (phone==null || phone.length()<11) {

    Toast.makeText(this, "请输入正确的手机号", Toast.LENGTH_SHORT).show();

    return;

   }

   if (rb_password.isChecked() == true) {

    if (et_password.getText().toString().equals(mPassword) != true) {

     Toast.makeText(this, "请输入正确的密码", Toast.LENGTH_SHORT).show();

     return;

    } else {

     loginSuccess();

    }

   } else if (rb_verifycode.isChecked() == true) {

    if (et_password.getText().toString().equals(mVerifyCode) != true) {

     Toast.makeText(this, "请输入正确的验证码", Toast.LENGTH_SHORT).show();

     return;

    } else {

     loginSuccess();

    }

   }

  }

 }

 

 @Override

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  if (requestCode == mRequestCode && data!=null) {

   //用户密码已改为新密码

   mPassword = data.getStringExtra("new_password");

  }

 }

 

 //从修改密码页面返回登录页面,要清空密码的输入框

 @Override

 protected void onRestart() {

  et_password.setText("");

  super.onRestart();

 }

 

 @Override

 protected void onResume() {

  super.onResume();

  mHelper = UserDBHelper.getInstance(this, 2);

  mHelper.openWriteLink();

 }

 

 @Override

 protected void onPause() {

  super.onPause();

  mHelper.closeLink();

 }

 

 private void loginSuccess() {

  String desc = String.format("您的手机号码是%s,类型是%s。恭喜你通过登录验证,点击“确定”按钮返回上个页面",

    et_phone.getText().toString(), typeArray[mType]);

  AlertDialog.Builder builder = new AlertDialog.Builder(this);

  builder.setTitle("登录成功");

  builder.setMessage(desc);

  builder.setPositiveButton("确定返回", new DialogInterface.OnClickListener() {

   @Override

   public void onClick(DialogInterface dialog, int which) {

    finish();

   }

  });

  builder.setNegativeButton("我再看看", null);

  AlertDialog alert = builder.create();

  alert.show();

 

  if (bRemember) {

   UserInfo info = new UserInfo();

   info.phone = et_phone.getText().toString();

   info.password = et_password.getText().toString();

   info.update_time = DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss");

   mHelper.insert(info);

  }

 }

 

 //为什么光标进入密码框事件不选onClick?因为要点两下才会触发onClick动作(第一下是切换焦点动作)

 @Override

 public void onFocusChange(View v, boolean hasFocus) {

  String phone = et_phone.getText().toString();

  if (v.getId() == R.id.et_password) {

   if (phone.length() > 0 && hasFocus == true) {

    UserInfo info = mHelper.queryByPhone(phone);

    if (info != null) {

     et_password.setText(info.password);

    }else{

     et_password.setText("");

    }

   }

  }

 }

 

 public static void startHome(Context mContext) {

  Intent intent = new Intent(mContext, class_4_2_3.class);

  mContext.startActivity(intent);

 }

 

 

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 android:layout_width="match_parent"

 android:layout_height="match_parent"

 android:focusable="true"

 android:focusableInTouchMode="true"

 android:orientation="vertical"

 android:padding="5dp" >

 

 <RadioGroup

  android:id="@+id/rg_login"

  android:layout_width="match_parent"

  android:layout_height="60dp"

  android:orientation="horizontal" >

 

  <RadioButton

   android:id="@+id/rb_password"

   android:layout_width="0dp"

   android:layout_height="match_parent"

   android:layout_weight="1"

   android:checked="true"

   android:gravity="left|center"

   android:text="密码登录"

   android:textColor="@color/black"

   android:textSize="17sp" />

 

  <RadioButton

   android:id="@+id/rb_verifycode"

   android:layout_width="0dp"

   android:layout_height="match_parent"

   android:layout_weight="1"

   android:checked="false"

   android:gravity="left|center"

   android:text="验证码登录"

   android:textColor="@color/black"

   android:textSize="17sp" />

 </RadioGroup>

 

 <RelativeLayout

  android:layout_width="match_parent"

  android:layout_height="60dp" >

 

  <TextView

   android:id="@+id/tv_type"

   android:layout_width="wrap_content"

   android:layout_height="match_parent"

   android:layout_alignParentLeft="true"

   android:gravity="center"

   android:text="  我是:"

   android:textColor="@color/black"

   android:textSize="17sp" />

 

  <Spinner

   android:id="@+id/sp_type"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:layout_toRightOf="@+id/tv_type"

   android:gravity="left|center"

   android:spinnerMode="dialog" />

 </RelativeLayout>

 

 <RelativeLayout

  android:layout_width="match_parent"

  android:layout_height="60dp" >

 

  <TextView

   android:id="@+id/tv_phone"

   android:layout_width="wrap_content"

   android:layout_height="match_parent"

   android:layout_alignParentLeft="true"

   android:gravity="center"

   android:text="手机号码:"

   android:textColor="@color/black"

   android:textSize="17sp" />

 

  <EditText

   android:id="@+id/et_phone"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:layout_marginBottom="5dp"

   android:layout_marginTop="5dp"

   android:layout_toRightOf="@+id/tv_phone"

   android:background="@drawable/editext_selector"

   android:gravity="left|center"

   android:hint="请输入手机号码"

   android:inputType="number"

   android:maxLength="11"

   android:textColor="@color/black"

   android:textColorHint="@color/grey"

   android:textCursorDrawable="@drawable/text_cursor"

   android:textSize="17sp" />

 </RelativeLayout>

 

 <RelativeLayout

  android:layout_width="match_parent"

  android:layout_height="60dp" >

 

  <TextView

   android:id="@+id/tv_password"

   android:layout_width="wrap_content"

   android:layout_height="match_parent"

   android:layout_alignParentLeft="true"

   android:gravity="center"

   android:text="登录密码:"

   android:textColor="@color/black"

   android:textSize="17sp" />

 

  <FrameLayout

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:layout_toRightOf="@+id/tv_password" >

 

   <EditText

    android:id="@+id/et_password"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:layout_marginBottom="5dp"

    android:layout_marginTop="5dp"

    android:background="@drawable/editext_selector"

    android:gravity="left|center"

    android:hint="请输入密码"

    android:inputType="numberPassword"

    android:maxLength="6"

    android:textColor="@color/black"

    android:textColorHint="@color/grey"

    android:textCursorDrawable="@drawable/text_cursor"

    android:textSize="17sp" />

 

   <Button

    android:id="@+id/btn_forget"

    android:layout_width="wrap_content"

    android:layout_height="match_parent"

    android:layout_gravity="right"

    android:gravity="center"

    android:text="忘记密码"

    android:textColor="@color/black"

    android:textSize="17sp" />

  </FrameLayout>

 </RelativeLayout>

 

 <CheckBox

  android:id="@+id/ck_remember"

  android:layout_width="match_parent"

  android:layout_height="wrap_content"

  android:button="@drawable/checkbox_selector"

  android:checked="false"

  android:padding="10dp"

  android:text="记住密码"

  android:textColor="@color/black"

  android:textSize="17sp" />

 

 <Button

  android:id="@+id/btn_login"

  android:layout_width="match_parent"

  android:layout_height="wrap_content"

  android:text="登录"

  android:textColor="@color/black"

  android:textSize="22sp" />

 

</LinearLayout>

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

package com.example.alimjan.hello_world;

 

/**

 * Created by alimjan on 7/4/2017.

 */

 

 

  import android.app.Activity;

  import android.app.AlertDialog;

  import android.content.Context;

  import android.content.Intent;

  import android.os.Bundle;

  import android.support.v7.app.AppCompatActivity;

  import android.view.View;

  import android.view.View.OnClickListener;

  import android.widget.EditText;

  import android.widget.Toast;

 

public class class_4_2_3_1 extends AppCompatActivity implements OnClickListener {

 

 private EditText et_password_first;

 private EditText et_password_second;

 private EditText et_verifycode;

 private String mVerifyCode;

 private String mPhone;

 

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.code_4_2_3_1);

  et_password_first = (EditText) findViewById(R.id.et_password_first);

  et_password_second = (EditText) findViewById(R.id.et_password_second);

  et_verifycode = (EditText) findViewById(R.id.et_verifycode);

  findViewById(R.id.btn_verifycode).setOnClickListener(this);

  findViewById(R.id.btn_confirm).setOnClickListener(this);

  mPhone = getIntent().getStringExtra("phone");

 }

 

 @Override

 public void onClick(View v) {

  if (v.getId() == R.id.btn_verifycode) {

   if (mPhone==null || mPhone.length()<11) {

    Toast.makeText(this, "请输入正确的手机号", Toast.LENGTH_SHORT).show();

    return;

   }

   mVerifyCode = String.format("%06d", (int) (Math.random() * 1000000 % 1000000));

   AlertDialog.Builder builder = new AlertDialog.Builder(this);

   builder.setTitle("请记住验证码");

   builder.setMessage("手机号"+mPhone+",本次验证码是"+mVerifyCode+",请输入验证码");

   builder.setPositiveButton("好的", null);

   AlertDialog alert = builder.create();

   alert.show();

  } else if (v.getId() == R.id.btn_confirm) {

   String password_first = et_password_first.getText().toString();

   String password_second = et_password_second.getText().toString();

   if (password_first==null || password_first.length()<6 ||

     password_second==null || password_second.length()<6) {

    Toast.makeText(this, "请输入正确的新密码", Toast.LENGTH_SHORT).show();

    return;

   }

   if (password_first.equals(password_second) != true) {

    Toast.makeText(this, "两次输入的新密码不一致", Toast.LENGTH_SHORT).show();

    return;

   }

   if (et_verifycode.getText().toString().equals(mVerifyCode) != true) {

    Toast.makeText(this, "请输入正确的验证码", Toast.LENGTH_SHORT).show();

    return;

   } else {

    Toast.makeText(this, "密码修改成功", Toast.LENGTH_SHORT).show();

    Intent intent = new Intent();

    intent.putExtra("new_password", password_first);

    setResult(Activity.RESULT_OK, intent);

    finish();

   }

  }

 }

 

 public static void startHome(Context mContext) {

  Intent intent = new Intent(mContext, class_4_2_3_1.class);

  mContext.startActivity(intent);

 }

 

}

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 android:layout_width="match_parent"

 android:layout_height="match_parent"

 android:focusable="true"

 android:focusableInTouchMode="true"

 android:orientation="vertical"

 android:padding="5dp" >

 

 <RelativeLayout

  android:layout_width="match_parent"

  android:layout_height="60dp" >

 

  <TextView

   android:id="@+id/tv_password_first"

   android:layout_width="wrap_content"

   android:layout_height="match_parent"

   android:layout_alignParentLeft="true"

   android:gravity="center"

   android:text="输入新密码:"

   android:textColor="@color/black"

   android:textSize="17sp" />

 

  <EditText

   android:id="@+id/et_password_first"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:layout_marginBottom="5dp"

   android:layout_marginTop="5dp"

   android:layout_toRightOf="@+id/tv_password_first"

   android:background="@drawable/editext_selector"

   android:gravity="left|center"

   android:hint="请输入新密码"

   android:inputType="numberPassword"

   android:maxLength="11"

   android:textColor="@color/black"

   android:textColorHint="@color/grey"

   android:textCursorDrawable="@drawable/text_cursor"

   android:textSize="17sp" />

 </RelativeLayout>

 

 <RelativeLayout

  android:layout_width="match_parent"

  android:layout_height="60dp" >

 

  <TextView

   android:id="@+id/tv_password_second"

   android:layout_width="wrap_content"

   android:layout_height="match_parent"

   android:layout_alignParentLeft="true"

   android:gravity="center"

   android:text="确认新密码:"

   android:textColor="@color/black"

   android:textSize="17sp" />

 

  <EditText

   android:id="@+id/et_password_second"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:layout_marginBottom="5dp"

   android:layout_marginTop="5dp"

   android:layout_toRightOf="@+id/tv_password_second"

   android:background="@drawable/editext_selector"

   android:gravity="left|center"

   android:hint="请再次输入新密码"

   android:inputType="numberPassword"

   android:maxLength="11"

   android:textColor="@color/black"

   android:textColorHint="@color/grey"

   android:textCursorDrawable="@drawable/text_cursor"

   android:textSize="17sp" />

 </RelativeLayout>

 

 <RelativeLayout

  android:layout_width="match_parent"

  android:layout_height="60dp" >

 

  <TextView

   android:id="@+id/tv_verifycode"

   android:layout_width="wrap_content"

   android:layout_height="match_parent"

   android:layout_alignParentLeft="true"

   android:gravity="center"

   android:text="  验证码:"

   android:textColor="@color/black"

   android:textSize="17sp" />

 

  <FrameLayout

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:layout_toRightOf="@+id/tv_verifycode" >

 

   <EditText

    android:id="@+id/et_verifycode"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:layout_marginBottom="5dp"

    android:layout_marginTop="5dp"

    android:background="@drawable/editext_selector"

    android:gravity="left|center"

    android:hint="请输入验证码"

    android:inputType="numberPassword"

    android:maxLength="6"

    android:textColor="@color/black"

    android:textColorHint="@color/grey"

    android:textCursorDrawable="@drawable/text_cursor"

    android:textSize="17sp" />

 

   <Button

    android:id="@+id/btn_verifycode"

    android:layout_width="wrap_content"

    android:layout_height="match_parent"

    android:layout_gravity="right"

    android:gravity="center"

    android:text="获取验证码"

    android:textColor="@color/black"

    android:textSize="17sp" />

  </FrameLayout>

 </RelativeLayout>

 

 <Button

  android:id="@+id/btn_confirm"

  android:layout_width="match_parent"

  android:layout_height="wrap_content"

  android:text="确定"

  android:textColor="@color/black"

  android:textSize="22sp" />

 

</LinearLayout>

当输入完手机号之后,点击密码编辑框时,从数据库查看内容,如果含有该号的密码则自动添加,如果没有则空。勾选记住密码选项之后,如果登陆成功则保存到数据库。

以上Android开发学习之SQLite优化后如何记住密码的全部内容,希望对大家的学习有所帮助。关注收藏我们爱站技术频道,每天带你了解不一样的技术资讯。

上一篇:Android开发学习之实践TDD的总结

下一篇:Android应用开发过程中关于图片缓存、手势及OOM的介绍

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载