4

Android でログイン/サインアップのウェルカム画面を実装するためのリファレンス サンプル プロジェクトはありますか?

これを行うために知っておく必要があることについて考えました:

  • 活動レイアウト
  • テキスト フィールドの検証
  • テキスト フィールドのヒント
  • UI 要素の有効化/無効化 (つまり、データが入力されている場合にのみログインを押す)
  • 資格情報を検証する非同期ネットワーク要求
  • ログイン待ちの UI をブロックする
  • ログイン結果に基づく次のアクティビティへの転送
  • 初めてのユーザーの場合のサインアップ間奏
  • ユーザーが必要に応じてネットワーク ログインをキャンセルする (ユーザーがアクティビティから離れた場合にコールバックでクラッシュしない)
  • ユーザーデータの保存、利用可能な場合はアクセストークン、それ以外の場合はパスワード(および暗号化)
  • 「アクセスが拒否されました」というフィードバックを含む遷移アニメーション
  • 利用可能な場合は、キャッシュされた資格情報を使用する
  • ログイン「私を記憶する」オプトアウト

書き留める箇条書きは他にもたくさんありますが、アイデアはわかります。

私が間違っている場合は修正してください。多くのアプリにはログイン/サインアップ画面がある (または開始する) 可能性があると思います。おそらく、開発者が車輪の再発明をあまりしないように、ほとんどのベストプラクティスを取り入れたカスタマイズ可能な Eclipse プロジェクトがどこかにあるのでしょうか?

明らかに、多くのアプリは別の方法で処理したいと考えています。明らかに、場合によっては、上記はナンセンスです。しかし..一部のアプリでは、これは合理的な「典型的な」ログインアクティビティでしょうか?

4

3 に答える 3

11

Eclipse 用の Android Development Tools (ADT) プラグインの最新バージョンには、新しい LoginActivity を作成するためのウィザードがあり、これを出発点として使用できます。以下の特長があります。

  • アクティビティのレイアウト テキスト フィールドの検証
  • テキスト フィールドのヒント
  • UI 要素の有効化/無効化
  • 認証情報を検証する非同期リクエスト
  • ログイン待ちの UI をブロックする
  • ログインのキャンセル

File -> New -> Other -> Android Activity -> LoginActivity にあります。

于 2013-03-30T03:58:44.157 に答える
3

1) /res/layout に login.xml (アクティビティ レイアウト) を作成します。この例では、パスワード変更の追加オプションがあります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/username"
        android:hint="Username"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="180dp"
        android:layout_gravity="center"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/password"
        android:layout_width="250dp"
        android:hint="Password"
        android:layout_marginTop="20dp"
        android:layout_gravity="center"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/Loginbutton"
        android:layout_gravity="center"
        android:layout_marginTop="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login" />

    <CheckedTextView
        android:id="@+id/changepassword"
        android:layout_width="wrap_content"
        android:layout_marginTop="75dp"
        android:clickable="true"
        android:layout_marginLeft="190dp"
        android:layout_height="wrap_content"
        android:text="Change_Login_Id" />

</LinearLayout>

2) /src// に Login.java クラスを作成します。

public class Login extends Activity{
    private Button login;
    private EditText Username;
    private EditText Password;
    private CheckedTextView changeid;
    public SQLiteDatabase sampleDB;
    public String COLUMN_ID="_id";
    public String COLUMN1="username";
    public String COLUMN2="password";
    public String TABLE_NAME="Androdata";
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        login=(Button)findViewById(R.id.Loginbutton);
        Username=(EditText)findViewById(R.id.username);
        Password=(EditText)findViewById(R.id.password);
        changeid=(CheckedTextView)findViewById(R.id.changepassword);
        sampleDB =  this.openOrCreateDatabase(TABLE_NAME, MODE_PRIVATE, null);
        boolean x=init(TABLE_NAME);
        if(x==false)
        {
        createDB();
        insertDB();
        }
        changeid.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myintent=new Intent("android.intent.action.DATABASE");
                startActivity(myintent);
            }
        });
        login.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                int k=check();
                if(k==1)                
                {
                    Toast.makeText(Login.this, "Login Successful ...", Toast.LENGTH_SHORT).show();
                    Intent myintent=new Intent("android.intent.action.CHOICE");
                    startActivity(myintent);
                }
                else
                {
                    Username.setText("");
                    Password.setText("");
                    Toast.makeText(Login.this, "Authentication Failed...", Toast.LENGTH_SHORT).show();
                }   
            }
        });
    }
    public boolean init(String tableName)
    {
        Cursor cursor = sampleDB.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null);
        if(cursor!=null) {
            if(cursor.getCount()>0) {
                                cursor.close();
                return true;
            }
                        cursor.close();
        }
        return false;
    }
    private void insertDB() {
        sampleDB.execSQL("INSERT INTO " +
                TABLE_NAME +
                " Values ('1','Androviewer','viewer');");   
        System.out.println("Inserted data successfully....");
    }
    private void createDB() {
        sampleDB.execSQL("CREATE TABLE IF NOT EXISTS " +
                TABLE_NAME+ "(" + COLUMN_ID
                + " integer primary key autoincrement, " + COLUMN1
                + " text not null,"+ COLUMN2
                + " text not null);");
        System.out.println("Database created successfully....");
    }
    private int check() {
        String a=Username.getText().toString();
        String b=Password.getText().toString();
        // TODO Auto-generated method stub
        Cursor c = sampleDB.rawQuery("SELECT username, password FROM " +
                TABLE_NAME +
                " where _id=1", null);

        if (c != null ) {
            if  (c.moveToFirst()) {
                do {
                    String orgusername = c.getString(c.getColumnIndex("username"));
                    String orgpassword = c.getString(c.getColumnIndex("password"));
                    if(a.equals(orgusername)&&b.equals(orgpassword))
                    {
                        return 1;
                    }
                    else
                    {
                        return 0;
                    }
                }while (c.moveToNext());
            }
        }
        return 0;
    }
}
于 2013-03-30T03:31:45.350 に答える
1
if u want a single time login u can use shared preferences or make a simple change in my db code .

1)u can set textfield hint in xml

android:hint="ur hint" 

2)Use Intent as i used to move forward from one activity to next.

Do u need any more
于 2013-03-30T03:35:36.337 に答える