android 活动说明,示例和说明:Android(Studio)登录活动模板生成的活动

第1步:使登录成功并进入主要活动

要在使用错误的用户/密码时使登录活动失败,并在成功时转到主活动,您需要对生成的代码进行以下更正:

AndroidManifest.xml :

将以下代码从主活动移至LoginActivity部分:

然后编辑LoginActivity.java并执行以下更改:

在doInBackground方法中,最后将返回值从true替换为false

@Override protected Boolean doInBackground(Void... params) { for (String credential : DUMMY_CREDENTIALS) { String[] pieces = credential.split(":"); if (pieces[0].equals(mEmail)) { // Account exists, return true if the password matches. return pieces[1].equals(mPassword); } } // TODO: register the new account here. return false; }

然后在onPostExecute方法中,在finish();之后添加一个新的intent finish(); :

@Override protected void onPostExecute(final Boolean success) { mAuthTask = null; showProgress(false); if (success) { finish(); Intent myIntent = new Intent(LoginActivity.this,MyMainActivity.class); LoginActivity.this.startActivity(myIntent); } else { mPasswordView.setError(getString(R.string.error_incorrect_password)); mPasswordView.requestFocus(); } }

现在使用以下user:password之一登录成功user:password凭据:

其他user:password尝试应该说明不正确的密码并留在登录页面。

步骤2:允许注册,将登录存储到数据库中并检查凭据与DB

我们现在将从数据库(SQLite)而不是静态variables获取登录信息。 这将允许我们在设备上注册多个用户。

首先,创建一个新的User.java类:

package com.clinsis.onlineresults.utils; /** * Created by csimon on 5/03/14. */ public class User { public long userId; public String username; public String password; public User(long userId, String username, String password){ this.userId=userId; this.username=username; this.password=password; } }

然后创建或更新您的SQLite帮助程序(在我的例子中为DBTools.java )类:

package com.clinsis.onlineresults.utils; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by csimon on 12/11/13. */ public class DBTools extends SQLiteOpenHelper { private final static int DB_VERSION = 10; public DBTools(Context context) { super(context, "myApp.db", null,DB_VERSION); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { String query = "create table logins (userId Integer primary key autoincrement, "+ " username text, password text)"; sqLiteDatabase.execSQL(query); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { try{ System.out.println("UPGRADE DB oldVersion="+oldVersion+" - newVersion="+newVersion); onCreate(sqLiteDatabase); if (oldVersion<10){ String query = "create table logins (userId Integer primary key autoincrement, "+ " username text, password text)"; sqLiteDatabase.execSQL(query); } } catch (Exception e){e.printStackTrace();} } @Override public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { // super.onDowngrade(db, oldVersion, newVersion); System.out.println("DOWNGRADE DB oldVersion="+oldVersion+" - newVersion="+newVersion); } public User insertUser (User queryValues){ SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("username", queryValues.username); values.put("password", queryValues.password); queryValues.userId=database.insert("logins", null, values); database.close(); return queryValues; } public int updateUserPassword (User queryValues){ SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("username", queryValues.username); values.put("password", queryValues.password); queryValues.userId=database.insert("logins", null, values); database.close(); return database.update("logins", values, "userId = ?", new String[] {String.valueOf(queryValues.userId)}); } public User getUser (String username){ String query = "Select userId, password from logins where username ='"+username+"'"; User myUser = new User(0,username,""); SQLiteDatabase database = this.getReadableDatabase(); Cursor cursor = database.rawQuery(query, null); if (cursor.moveToFirst()){ do { myUser.userId=cursor.getLong(0); myUser.password=cursor.getString(1); } while (cursor.moveToNext()); } return myUser; } }

注意: DB_VERSION用于检测数据库模式的升级/降级;)

然后修改LoginActivity.java,如下所示:

添加以下导入:

import android.widget.Toast; import com.clinsis.onlineresults.utils.DBTools; import com.clinsis.onlineresults.utils.User;

添加一个新variables:

private User myUser;

删除DUMMY_CREDENTIALSvariables声明。

在attemptLogin方法中,在调用UserLoginTask时添加上下文:

mAuthTask = new UserLoginTask(email, password, this);

使用以下代码替换内部UserLoginTask类:

/** * Represents an asynchronous login/registration task used to authenticate * the user. */ public class UserLoginTask extends AsyncTask{ private final String mEmail; private final String mPassword; private final Context mContext; UserLoginTask(String email, String password, Context context) { mEmail = email; mPassword = password; mContext= context; } @Override protected Boolean doInBackground(Void... params) { DBTools dbTools=null; try{ dbTools = new DBTools(mContext); myUser = dbTools.getUser(mEmail); if (myUser.userId>0) { // Account exists, check password. if (myUser.password.equals(mPassword)) return true; else return false; } else { myUser.password=mPassword; return true; } } finally{ if (dbTools!=null) dbTools.close(); } // return false if no previous checks are true return false; } @Override protected void onPostExecute(final Boolean success) { mAuthTask = null; showProgress(false); if (success) { if (myUser.userId>0){ finish(); Intent myIntent = new Intent(LoginActivity.this,ReportListActivity.class); LoginActivity.this.startActivity(myIntent); } else { DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which){ case DialogInterface.BUTTON_POSITIVE: DBTools dbTools=null; try{ finish(); dbTools = new DBTools(mContext); myUser=dbTools.insertUser(myUser); Toast myToast = Toast.makeText(mContext,R.string.updatingReport, Toast.LENGTH_SHORT); myToast.show(); Intent myIntent = new Intent(LoginActivity.this,ReportListActivity.class); LoginActivity.this.startActivity(myIntent); } finally{ if (dbTools!=null) dbTools.close(); } break; case DialogInterface.BUTTON_NEGATIVE: mPasswordView.setError(getString(R.string.error_incorrect_password)); mPasswordView.requestFocus(); break; } } }; AlertDialog.Builder builder = new AlertDialog.Builder(this.mContext); builder.setMessage(R.string.confirm_registry).setPositiveButton(R.string.yes, dialogClickListener) .setNegativeButton(R.string.no, dialogClickListener).show(); } } else { mPasswordView.setError(getString(R.string.error_incorrect_password)); mPasswordView.requestFocus(); } } @Override protected void onCancelled() { mAuthTask = null; showProgress(false); } }

在strings.xml ,添加:

Email not found. You want to create a new user with that email and password? Yes No

我希望我没有忘记任何事情......它对我来说很好:D

如果数据库中没有电子邮件,它将建议注册,否则它将检查电子邮件与密码。

玩得开心:D

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值