Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注册后,按back键进入登录屏幕_Java_Android_Login - Fatal编程技术网

Java 注册后,按back键进入登录屏幕

Java 注册后,按back键进入登录屏幕,java,android,login,Java,Android,Login,我制作了一个需要用户注册的应用程序。用户第一次打开应用程序-登录屏幕打开。他们需要点击“进入注册”按钮进入注册活动。注册后,他们将自动登录 现在问题来了——当用户第一次注册时,他被发送到MainActivity。他应该按back,应用程序应该关闭。但当他试图退出应用程序时,他按下后退按钮,而不是关闭应用程序,而是返回登录屏幕。 下次我尝试登录时,我没有问题-它直接进入主活动 我的活动是这样的: 后勤活动: public class LoginActivity extends AppCompatA

我制作了一个需要用户注册的应用程序。用户第一次打开应用程序-登录屏幕打开。他们需要点击“进入注册”按钮进入注册活动。注册后,他们将自动登录

现在问题来了——当用户第一次注册时,他被发送到MainActivity。他应该按back,应用程序应该关闭。但当他试图退出应用程序时,他按下后退按钮,而不是关闭应用程序,而是返回登录屏幕。 下次我尝试登录时,我没有问题-它直接进入主活动

我的活动是这样的:

后勤活动:

public class LoginActivity extends AppCompatActivity {
private static final String TAG = "LoginActivity";
private static final int REQUEST_REGISTER = 0;

@InjectView(R.id.input_email) EditText _emailText;
@InjectView(R.id.input_password) EditText _passwordText;
@InjectView(R.id.btn_login) Button _loginButton;
@InjectView(R.id.link_register) TextView _registerLink;

CheckBox checkBoxShowPassword;

private SessionManager session;
private SQLiteHandler db;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    ButterKnife.inject(this);

    // SQLite database handler
    db = new SQLiteHandler(getApplicationContext());
    // Session manager
    session = new SessionManager(getApplicationContext());
    // Check if user is already logged in or not
    if (session.isLoggedIn()) {
        // User is already logged in. Take him to main activity
        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
    }

    _loginButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String email = _emailText.getText().toString().trim();
            String password = _passwordText.getText().toString().trim();

            if (!email.isEmpty() && !password.isEmpty()) {
                // login user
                login(email, password);
            } else {
                // Prompt user to enter credentials
                Toast.makeText(getApplicationContext(),
                        "Please enter the credentials!", Toast.LENGTH_LONG)
                        .show();
            }
        }
    });

    //        Go to register screen
    _registerLink.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // Start the Register activity
            Intent intent = new Intent(getApplicationContext(), RegisterActivity.class);
            startActivityForResult(intent, REQUEST_REGISTER);
        }
    });

    //        Password checkbox
    checkBoxShowPassword = (CheckBox) findViewById(R.id.checkBoxShowPassword);
    checkBoxShowPassword.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // checkbox status is changed from uncheck to checked.
            if (!isChecked) {
                // show password
                _passwordText.setTransformationMethod(PasswordTransformationMethod.getInstance());
            } else {
                // hide password
                _passwordText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
            }
        }
    });
}

//    Login
public void login(final String email, final String password) {
    Log.d(TAG, "Login");

    if (!validate()) {
        onLoginFailed();
        return;
    }

    //        Change to false for disabling after error
    _loginButton.setEnabled(true);

    String tag_string_req = "req_login";

    final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this,
            R.style.AppTheme_Dark_Dialog);
    progressDialog.setIndeterminate(true);
    progressDialog.setMessage("Authenticating...");
    progressDialog.show();

    // TODO: Implementing authentication logic

    StringRequest strReq = new StringRequest(Request.Method.POST,
            AppConfig.URL_LOGIN, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            Log.d(TAG, "Login Response: " + response.toString());
            progressDialog.dismiss();

            try {
                JSONObject jObj = new JSONObject(response);
                boolean error = jObj.getBoolean("error");

                // Check for error node in json
                if (!error) {
                    // user successfully logged in
                    // Create login session
                    session.setLogin(true);

                    // Now store the user in SQLite
                    String uid = jObj.getString("uid");

                    JSONObject user = jObj.getJSONObject("user");
                    String name = user.getString("name");
                    String email = user.getString("email");
                    String created_at = user
                            .getString("created_at");

                    // Inserting row in users table
                    db.addUser(name, email, uid, created_at);

                    // Launch main activity
                    Intent intent = new Intent(LoginActivity.this,
                            MainActivity.class);
                    startActivity(intent);
                    finish();
                } else {
                    // Error in login. Get the error message
                    String errorMsg = jObj.getString("error_msg");
                    Toast.makeText(getApplicationContext(),
                            errorMsg, Toast.LENGTH_LONG).show();
                }
            } catch (JSONException e) {
                // JSON error
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
            }

        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Login Error: " + error.getMessage());

            Toast toast = Toast.makeText(getApplicationContext(),
                    "Registration failed due to connectivity issues", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
    //                _loginButton.setEnabled(true);
            progressDialog.dismiss();

        }
    }) {

        @Override
        protected Map<String, String> getParams() {
            // Posting parameters to login url
            Map<String, String> params = new HashMap<String, String>();
            params.put("email", email);
            params.put("password", password);

            return params;
        }

    };

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req);


@Override
public void onBackPressed() {
    // disable going back to the MainActivity
    moveTaskToBack(true);
}

public void onLoginSuccess() {
    _loginButton.setEnabled(true);
    finish();
}

public void onLoginFailed() {
    Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show();

    _loginButton.setEnabled(true);
}

//    Validation
public boolean validate() {
    boolean valid = true;

    String email = _emailText.getText().toString();
    String password = _passwordText.getText().toString();

    if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        _emailText.setError("Enter a valid email address");
        valid = false;
    } else {
        _emailText.setError(null);
    }

    if (password.isEmpty() || password.length() < 4 || password.length() > 20) {
        _passwordText.setError("Enter between 4 and 20 alphanumeric characters");
        valid = false;
    } else {
        _passwordText.setError(null);
    }

    return valid;
}
}
公共类LoginActivity扩展了AppCompatActivity{
私有静态最终字符串TAG=“LoginActivity”;
专用静态最终整数请求\寄存器=0;
@InjectView(R.id.input\u email)EditText\u emailText;
@InjectView(R.id.input_password)EditText_passwordText;
@InjectView(R.id.btn_登录)按钮_登录按钮;
@InjectView(R.id.link_register)TextView_registerLink;
复选框checkBoxShowPassword;
私人会话管理器会话;
私有SQLiteHandler数据库;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
注射(这个);
//SQLite数据库处理程序
db=新的SQLiteHandler(getApplicationContext());
//会话管理器
session=newsessionmanager(getApplicationContext());
//检查用户是否已登录
if(session.isLoggedIn()){
//用户已登录。请将其带到主活动
意向意向=新意向(LoginActivity.this、MainActivity.class);
星触觉(意向);
完成();
}
_loginButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串email=_emailText.getText().toString().trim();
字符串密码=_passwordText.getText().toString().trim();
如果(!email.isEmpty()&&!password.isEmpty()){
//登录用户
登录(电子邮件、密码);
}否则{
//提示用户输入凭据
Toast.makeText(getApplicationContext(),
“请输入凭据!”,Toast.LENGTH\u LONG)
.show();
}
}
});
//转到注册屏幕
_registerLink.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//启动注册活动
Intent Intent=新的Intent(getApplicationContext(),RegisterActivity.class);
startActivityForResult(意向、请求和登记);
}
});
//密码复选框
checkBoxShowPassword=(复选框)findViewById(R.id.checkBoxShowPassword);
checkBoxShowPassword.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
检查更改后的公共无效(复合按钮视图,布尔值已检查){
//复选框状态从未选中更改为已选中。
如果(!已检查){
//显示密码
_setTransformationMethod(PasswordTransformationMethod.getInstance());
}否则{
//隐藏密码
_setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}
}
});
}
//登录
公共无效登录(最终字符串电子邮件、最终字符串密码){
Log.d(标记“登录”);
如果(!validate()){
onLoginFailed();
返回;
}
//更改为false以在出错后禁用
_loginButton.setEnabled(true);
String tag\u String\u req=“req\u login”;
final ProgressDialog ProgressDialog=新建ProgressDialog(LoginActivity.this,
R.style.AppTheme(黑色对话框);
progressDialog.setUndeterminate(true);
progressDialog.setMessage(“身份验证…”);
progressDialog.show();
//TODO:实现身份验证逻辑
StringRequest strReq=新的StringRequest(Request.Method.POST,
AppConfig.URL\u登录,新建响应.Listener(){
@凌驾
公共void onResponse(字符串响应){
Log.d(标记“登录响应:+Response.toString());
progressDialog.disclose();
试一试{
JSONObject jObj=新的JSONObject(响应);
布尔错误=jObj.getBoolean(“错误”);
//检查json中的错误节点
如果(!错误){
//用户已成功登录
//创建登录会话
session.setLogin(true);
//现在将用户存储在SQLite中
stringuid=jObj.getString(“uid”);
JSONObject user=jObj.getJSONObject(“用户”);
字符串名称=user.getString(“名称”);
String email=user.getString(“电子邮件”);
在=用户处创建的字符串
.getString(“创建于”);
//在用户表中插入行
db.addUser(姓名、电子邮件、uid、创建地址);
//开展主要活动
意向意向=新意向(LoginActivity.this,
主要活动(课堂);
星触觉(意向);
完成();
}否则{
//登录时出错。获取错误消息
String errorMsg=jObj.getString(“error_msg”);
Toast.makeText(getApplicationContext(),
errorMsg,Toast.LENGTH_LONG).show();
}
}捕获(JSONException e){
//JSON错误
e、 printStackTrace();
Toast.makeText(getApplicationContext(),“Json错误:”+e.getMessa
public class RegisterActivity extends AppCompatActivity {
private static final String TAG = "RegisterActivity";

@InjectView(R.id.input_name) EditText _nameText;
@InjectView(R.id.input_email) EditText _emailText;
@InjectView(R.id.input_password) EditText _passwordText;
@InjectView(R.id.btn_register) Button _registerButton;
@InjectView(R.id.link_login) TextView _loginLink;

CheckBox checkBoxShowPassword;

private SessionManager session;
private SQLiteHandler db;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);
    ButterKnife.inject(this);

    // Session manager
    session = new SessionManager(getApplicationContext());
    // SQLite database handler
    db = new SQLiteHandler(getApplicationContext());
    // Check if user is already logged in or not
    if (session.isLoggedIn()) {
        // User is already logged in. Take him to main activity
        Intent intent = new Intent(RegisterActivity.this,
                MainActivity.class);
        startActivity(intent);
        finish();
    }

    //        Register button
    _registerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String name = _nameText.getText().toString().trim();
            String email = _emailText.getText().toString().trim();
            String password = _passwordText.getText().toString().trim();
            String phone = getMyPhoneNumber();

            if (!name.isEmpty() && !email.isEmpty() && !password.isEmpty()) {
                register(name, email, password, phone);
            } else {
                Toast.makeText(getApplicationContext(),
                        "Please enter your details!", Toast.LENGTH_LONG)
                        .show();
            }
        }
    });

    //        Go to login screen
    _loginLink.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Finish the registration screen and return to the Login activity
            finish();
        }
    });

    //        Password checkbox
    checkBoxShowPassword = (CheckBox) findViewById(R.id.checkBoxShowPassword);
    checkBoxShowPassword.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // checkbox status is changed from uncheck to checked.
            if (!isChecked) {
                // show password
                _passwordText.setTransformationMethod(PasswordTransformationMethod.getInstance());
            } else {
                // hide password
                _passwordText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
            }
        }
    });
}

   //    Register
public void register(final String name, final String email, final String password, final String phone) {
    Log.d(TAG, "Register");

    if (!validate()) {
        onRegisterFailed();
        return;
    }

    _registerButton.setEnabled(false);

    String tag_string_req = "req_register";

    final ProgressDialog progressDialog = new ProgressDialog(RegisterActivity.this,
            R.style.AppTheme_Dark_Dialog);
    progressDialog.setIndeterminate(true);
    progressDialog.setMessage("Creating Account...");
    progressDialog.show();

    // TODO: Implementing register logic
    StringRequest strReq = new StringRequest(Request.Method.POST,
            AppConfig.URL_REGISTER, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            Log.d(TAG, "Register Response: " + response.toString());
            progressDialog.dismiss();

            try {
                JSONObject jObj = new JSONObject(response);
                boolean error = jObj.getBoolean("error");
                if (!error) {
                    // User successfully stored in MySQL
                    // Now store the user in sqlite
                    String uid = jObj.getString("uid");

                    JSONObject user = jObj.getJSONObject("user");
                    String name = user.getString("name");
                    String email = user.getString("email");
                    String created_at = user
                            .getString("created_at");

                    // Inserting row in users table
                    db.addUser(name, email, uid, created_at);

                    //TODO: insert contacts to local db
                    String[] PROJECTION = new String[] {
                            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                            ContactsContract.CommonDataKinds.Phone.NUMBER
                    };

                    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, null);
                    while (phones.moveToNext()) {
                        if (phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER) != -1)
                        {
                            String username = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                            db.addContact(username, phoneNumber);
                        }
                    }
                    phones.close();

                    Toast.makeText(getApplicationContext(), "Registration successful!", Toast.LENGTH_LONG).show();

     //                        Auto login
                    session.setLogin(true);

                    // Launch login activity
                    Intent intent = new Intent(
                            RegisterActivity.this,
                            MainActivity.class);
                    startActivity(intent);
                    finish();
                } else {

                    // Error occurred in registration. Get the error
                    // message
                    String errorMsg = jObj.getString("error_msg");
                    Toast.makeText(getApplicationContext(),
                            errorMsg, Toast.LENGTH_LONG).show();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Registration Error: " + error.getMessage());
            Toast toast = Toast.makeText(getApplicationContext(),
                    "Registration failed due to connectivity issues", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
            _registerButton.setEnabled(true);
            progressDialog.dismiss();
        }
    }) {

        @Override
        protected Map<String, String> getParams() {
            // Posting params to register url
            Map<String, String> params = new HashMap<String, String>();
            params.put("name", name);
            params.put("email", email);
            params.put("password", password);
            params.put("phone", phone);

            return params;
        }

    };

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req);

}

public void onRegisterSuccess() {
    _registerButton.setEnabled(true);
    setResult(RESULT_OK, null);
    finish();
}

public void onRegisterFailed() {
    Toast.makeText(getBaseContext(), "Registration failed", Toast.LENGTH_LONG).show();

    _registerButton.setEnabled(true);
}

    //    Validation
public boolean validate() {
    boolean valid = true;

    String name = _nameText.getText().toString();
    String email = _emailText.getText().toString();
    String password = _passwordText.getText().toString();

    if (name.isEmpty() || name.length() < 3) {
        _nameText.setError("Enter at least 3 characters");
        valid = false;
    } else {
        _nameText.setError(null);
    }

    if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        _emailText.setError("Enter a valid email address");
        valid = false;
    } else {
        _emailText.setError(null);
    }

    if (password.isEmpty() || password.length() < 4 || password.length() > 20) {
        _passwordText.setError("Enter between 4 and 20 alphanumeric characters");
        valid = false;
    } else {
        _passwordText.setError(null);
    }

    return valid;
}

// Get users phone number
private String getMyPhoneNumber() {
    TelephonyManager tMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    String MyPhoneNumber = "0000000000";

    try
    {
        MyPhoneNumber =tMgr.getLine1Number();
    }
    catch(NullPointerException ex)
    {
    }

    if(MyPhoneNumber.equals("")){
        MyPhoneNumber = tMgr.getSubscriberId();
    }

    return MyPhoneNumber;
}

private String getMy10DigitPhoneNumber() {
    String s = getMyPhoneNumber();
    return s.substring(2);
}
}
Intent intent = new Intent(getApplicationContext(), RegisterActivity.class);
startActivityForResult(intent, REQUEST_REGISTER);
Intent intent = new Intent(getApplicationContext(), RegisterActivity.class);
startActivity(intent);
finish();
    //        Go to register screen
        _registerLink.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // Start the Register activity
                Intent intent = new Intent(getApplicationContext(), RegisterActivity.class);
                startActivityForResult(intent, REQUEST_REGISTER);
                LoginActivity.this.finish(); 
            }
        });
    public static LoginActivity mLogin_activity;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mLogin_activity=LoginActivity.this;
  @Override
        public void onBackPressed() {
            super.onBackPressed();
            if (LoginActivity.mLogin_activity!=null) {
                LoginActivity.mLogin_activity.finish();
                MainActivity.this.finish();
            }else {
                MainActivity.this.finish();
            }
        }