Android应用程序登录

时间:2010-11-17 06:57:54

标签: android login

有人可以帮我建议一些我可以开始的好教程。 我想用仪表板和登录屏幕构建一个简单的应用程序。首次要求用户登录屏幕。登录检查是通过对远程PHP脚本的POST调用来执行的。用户登录后,应将其重定向到仪表板。一旦用户关闭并重新打开应用程序,他就应该重定向到登录屏幕。

我知道如何创建表单以及如何发布,在基于用户角色切换布局以及如何导入/扩展类方面需要帮助,例如我更喜欢单独登录(活动)类。但是这个登录类需要导入到Main(main应该扩展Activity)

5 个答案:

答案 0 :(得分:19)

答案 1 :(得分:2)

我不确定我是否完全理解您的问题,但在开始和完成活动时,本教程非常好:

http://developerlife.com/tutorials/?p=302

如果您希望用户在您调用它时重新定向到登录屏幕,那么在解决方案的后台运行后返回应用程序就是捕获Main活动中的onStop()事件。用户离开应用程序时会触发此事件。

如果您解释“但此登录类需要导入Main”这一行,我也可以回答这个问题。

答案 2 :(得分:2)

我为UserApp创建了一个SDK,负责处理大部分用户身份验证,例如登录,注册,会话,用户个人资料,社交登录等。

https://github.com/userapp-io/userapp-android

由于它是开源的,您可以根据自己的需要修改它并连接到您自己的服务。

登录表单将放在扩展AuthFragment的片段中,如下所示:

public class LoginFragment extends AuthFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_signup, container, false);

        // Setup the login form with bindings to UserApp
        super.setupLoginForm(view, R.id.login, R.id.password, R.id.login_button);

        return view;
    }

    @Override
    public Boolean onLoginStart(String login, String password, Boolean isSocialLogin) {
        // Show loader when waiting for server
        getView().findViewById(R.id.login_form).setVisibility(View.GONE);
        getView().findViewById(R.id.login_status).setVisibility(View.VISIBLE);

        // Return true to complete the login
        return true;
    }

    @Override
    public void onLoginCompleted(Boolean authenticated, Exception exception) {
        // Hide the loader
        getView().findViewById(R.id.login_form).setVisibility(View.VISIBLE);
        getView().findViewById(R.id.login_status).setVisibility(View.GONE);

        if (exception != null) {
            // Show an error message
            ((TextView) getView().findViewById(R.id.error_text)).setText(exception.getMessage());
        } else {
            // Clear the message
            ((TextView) getView().findViewById(R.id.error_text)).setText("");
        }
    }
}

LoginFragment的布局看起来像这样:

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

    <!-- Progress -->
    <LinearLayout
        android:id="@+id/login_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:visibility="gone" >

        <ProgressBar
            style="?android:attr/progressBarStyleLarge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp" />

        <TextView
            android:id="@+id/login_status_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:fontFamily="sans-serif-light"
            android:text="@string/login_progress_signing_in"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>

    <!-- Login form -->
    <ScrollView
        android:id="@+id/login_form"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout 
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center" >

            <EditText
                android:id="@+id/login"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:hint="@string/username"
                android:maxLines="1"
                android:singleLine="true" />

            <EditText
                android:id="@+id/password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textPassword"
                android:hint="@string/password"
                android:maxLines="1"
                android:singleLine="true" />

            <Button
                android:id="@+id/login_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:paddingLeft="32dp"
                android:paddingRight="32dp"
                android:text="@string/login" />

            <Button
                android:id="@+id/facebook_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:paddingLeft="32dp"
                android:paddingRight="32dp"
                android:text="@string/facebook_login" />

            <Button
                android:id="@+id/show_signup"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:paddingLeft="32dp"
                android:paddingRight="32dp"
                android:text="@string/signup" />

            <TextView
                android:id="@+id/error_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textAppearance="?android:attr/textAppearanceSmall" />

        </LinearLayout>
    </ScrollView>

</LinearLayout>

然后将其添加到您的主要活动的布局中,以及包含您的&#34;仪表板&#34;的另一个片段:

<RelativeLayout ... >
    <fragment
        android:id="@+id/loginFragment"
        android:name="com.example.demo.LoginFragment"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />

    ...
</RelativeLayout>

这只是简要介绍了如何使用该库。有关如何使用它的更多信息,请参阅文档。另请查看GitHub上的演示应用程序。

如接受的答案所述;要在关闭应用时注销用户,请收听主要活动中的onStop()事件并致电session.logout(),如下所示:

UserApp.Session session;
session.logout();

答案 3 :(得分:0)

如果你知道一些php,mysql并且可以创建一个php文件来验证登录凭据,那么这将有所帮助:

http://www.androidsnippets.org/snippets/36/index.html

答案 4 :(得分:0)

登录屏幕活动在这里

公共类 LoginActivity 扩展 AppCompatActivity {

private DemoApp demoApp;
private EditText edtEmail, edtPassword;
private Button btnSignIn, btnSignUp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    initComponent();
    setComponent();
}

private void initComponent() {
    demoApp = (DemoApp) this.getApplicationContext();
    edtEmail = (EditText) findViewById(R.id.edt_email);
    edtPassword = (EditText) findViewById(R.id.edt_password);

    btnSignIn = (Button) findViewById(R.id.btn_sign);
    btnSignUp = (Button) findViewById(R.id.btn_sign_up);
}

private void setComponent() {
    btnSignIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String email = edtEmail.getText().toString();
            String pass = edtPassword.getText().toString();
            if (validate(email, pass)) {
                if (demoApp.getSqliteHelper().login(new User(null, null, email, pass))) {
                    Toast.makeText(LoginActivity.this, "Successfully Logged in!", Toast.LENGTH_SHORT).show();
                    Intent intent=new Intent(LoginActivity.this, HomeScreenActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                    finish();
                } else {
                    Toast.makeText(LoginActivity.this, "Failed to log in , please try again", Toast.LENGTH_SHORT).show();

                }
            }
        }
    });

    btnSignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(LoginActivity.this, SignUpActivity.class);
            startActivity(intent);
        }
    });
}

private boolean validate(String email, String pass) {
    if (!android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        Toast.makeText(this, "Please enter valid email!", Toast.LENGTH_SHORT).show();
        return false;
    } else if (pass.isEmpty()) {
        Toast.makeText(this, "Please enter valid password!", Toast.LENGTH_SHORT).show();
        return false;
    } else if (pass.length() < 5) {
        Toast.makeText(this, "Password is to short!", Toast.LENGTH_SHORT).show();
    }

    return true;
}

}