有人可以帮我建议一些我可以开始的好教程。 我想用仪表板和登录屏幕构建一个简单的应用程序。首次要求用户登录屏幕。登录检查是通过对远程PHP脚本的POST调用来执行的。用户登录后,应将其重定向到仪表板。一旦用户关闭并重新打开应用程序,他就应该重定向到登录屏幕。
我知道如何创建表单以及如何发布,在基于用户角色切换布局以及如何导入/扩展类方面需要帮助,例如我更喜欢单独登录(活动)类。但是这个登录类需要导入到Main(main应该扩展Activity)
答案 0 :(得分:19)
这篇文章将帮助您创建屏幕 Android Login and Registration Screen Design
还有关于Android Login and Registration with PHP, MySQL and SQLite
的教程答案 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文件来验证登录凭据,那么这将有所帮助:
答案 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;
}
}