注销应用程序

时间:2018-12-01 20:29:03

标签: android

我正在尝试在我的android应用程序中实现注销方法 并编写以下代码。 Main Activity是一个登录活动,而ChoosingProcActivity是一个包含注销按钮的活动。 当我按下注销按钮时,它会将我移至“主要活动”,而在下次打开应用程序时,它将直接将我移至“选择活动激活”。 此外,当我成功登录后再返回或按回去时,它还会显示Main Activity(登录)。我该如何避免呢? 共享首选项有误吗?

Main Activity code



  package com.example.lenovo.tactic;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;


public class MainActivity extends AppCompatActivity {

    EditText email_input,password_input;
    TextView reset;
    Button btnLogin;
    Boolean isLogedBefore = false;
    Vibrator v;
    String organizer_ID;
    SharedPreferences test_name;
    final String loginURL = "http://tactickevent.com/phpApp/loginApp.php";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        email_input = findViewById(R.id.etUserName);
        password_input = findViewById(R.id.etPassword);
        btnLogin = findViewById(R.id.btnLogin);
        test_name = getSharedPreferences("NAME", Context.MODE_PRIVATE);
        test_name.getString("email", "");
        test_name.getString("organizer_ID", "");
        // if(isLogedBefore == true){
        boolean is = test_name.getBoolean("isLoged", false);
        if (is==true) {
            Intent intent = new Intent(MainActivity.this, ChoosingProcActivity.class);
            startActivity(intent);

       // }
        }

        v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                validateUserData();
            }
        });


    }
    private void validateUserData() {

        //first getting the values
        final String email = email_input.getText().toString();
        final String password = password_input.getText().toString();

        //checking if email is empty
        if (TextUtils.isEmpty(email)) {
            email_input.setError("أدخل البريد الالكتروني من فضلك");
            email_input.requestFocus();
            // Vibrate for 100 milliseconds
            v.vibrate(100);
            btnLogin.setEnabled(true);
            return;
        }
        //checking if password is empty
        if (TextUtils.isEmpty(password)) {
            password_input.setError("أدخل كلمة السر من فضلك");
            password_input.requestFocus();
            //Vibrate for 100 milliseconds
            v.vibrate(100);
            btnLogin.setEnabled(true);
            return;
        }
        //validating email
        if (!android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
            email_input.setError("أدخل بريد الكتروني صحيح");
            email_input.requestFocus();
            //Vibrate for 100 milliseconds
            v.vibrate(100);
            btnLogin.setEnabled(true);
            return;
        }


        //Login User if everything is fine
        //first getting the values
        //String emaill = email_input.getText().toString();
        // String passwordd = password_input.getText().toString();
        loginUser(email,password);


    }

    private void loginUser(final String email,final String password) {



        RequestQueue queue = Volley.newRequestQueue(this);

        //Call our volley library
        StringRequest stringRequest = new StringRequest(Request.Method.POST,loginURL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        try {
//                            Toast.makeText(getApplicationContext(),response.toString(), Toast.LENGTH_SHORT).show();

                            JSONObject obj = new JSONObject(response);
                            if (obj.getInt("value")== 1) {
                                 organizer_ID = obj.getString("organizer_ID");
                                //storing the user in shared preferences
                                //SharedPref.getInstance(getApplicationContext()).storeID(organizer_ID);
                                //starting the ChoosingProcActivity
                                SharedPreferences.Editor editor = test_name.edit();
                                editor.putBoolean("isLoged",true);
                                editor.putString("email", email);
                                editor.putString("organizer_ID", organizer_ID);
                                //apply
                                editor.commit();
                                Toast.makeText(getApplicationContext(), "تم تسجيل الدخول بنجاح", Toast.LENGTH_SHORT).show();
                                startActivity(new Intent(getApplicationContext(), ChoosingProcActivity.class));
                                //finish();

                             //  startActivity(new Intent(getApplicationContext(), ChoosingProcActivity.class));

                            } else{
                                Toast.makeText(getApplicationContext(),"هناك خطأ في كلمة السر أو البريد الالكتروني ", Toast.LENGTH_SHORT).show();

                                //getting user name
                                //Toast.makeText(getApplicationContext(), obj.getString("messagee"), Toast.LENGTH_SHORT).show();

                                //storing the user in shared preferences
                                //SharedPref.getInstance(getApplicationContext()).storeUserName(organizer_ID);
                                //starting the profile activity
                                //finish();
                                //startActivity(new Intent(getApplicationContext(), ChoosingProcActivity.class));

                            }



                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(),"Connection Error"+error, Toast.LENGTH_SHORT).show();
                        error.printStackTrace();
                    }
                }) {

            //email key mean the value that will send to php in $_POST["email"];
            //password key mean the value that will send to php in $_POST["password"];

            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("email", email);
                params.put("password", password);

                return params;
            }
        };
        queue.add(stringRequest);



/*
        String type = "login";
        BackgroundWorker backgroundWorker = new BackgroundWorker(this);
        backgroundWorker.execute(type, email, password);


        try {
            JSONObject jsonObject = new JSONObject(result1);
            SharedPreferences.Editor editor = test_name.edit();
            editor.putBoolean("isLoged",true);
            editor.putString("email", email);
            editor.putString("organizer_ID", jsonObject.getString("organizer_ID"));
            //apply
            editor.commit();

        */
    }




}

第二项活动代码

package com.example.lenovo.tactic;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class ChoosingProcActivity extends AppCompatActivity {
    Button eventBTN, subeventBTN;
    SharedPreferences test_name;
    String emailToPass,organizer_ID;
    SharedPreferences preferences;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_choosing_proc);
        eventBTN= (Button)findViewById(R.id.BtnEvent);
        subeventBTN= (Button)findViewById(R.id.BtnSubEvent);
        test_name = getSharedPreferences("NAME", Context.MODE_PRIVATE);
        emailToPass= test_name.getString("email", "");
        organizer_ID= test_name.getString("organizer_ID", "");
        eventBTN.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(ChoosingProcActivity.this, EventProcActivity.class);
                startActivity(intent);

            }
        });

        subeventBTN.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(ChoosingProcActivity.this, SubeventProcActivity.class);
                startActivity(intent);

            }
        });
    }
    @Override

    public boolean onCreateOptionsMenu(Menu menu){
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.main_menu, menu);
        return true;
    }
    @Override

    public boolean onOptionsItemSelected(MenuItem item){
        if(item.getItemId() ==R.id.logout)
        {
            preferences =getSharedPreferences("Name",Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = preferences.edit();
            editor.clear();
            editor.commit();
            finish();


        }
        return true;
    }
}

2 个答案:

答案 0 :(得分:0)

您可以在每次测试为真时完成活动,以使它不再可从堆栈中访问。

boolean is = test_name.getBoolean("isLoged", false);
if (is) {
    Intent intent = new Intent(MainActivity.this, ChoosingProcActivity.class);
    startActivity(intent);
    finish();
}

答案 1 :(得分:0)

我假设您的MainActivity是打开应用程序时第一个启动的应用程序。 在您的MainActivity中添加以下内容:

@Override
protected void onStart() {
    super.onStart();

    if (SharedPrefManager.getInstance(this).isLoggedIn()) {

            Intent intent = new Intent(this, ChoosingProcActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
            finish();
    }

}

在启动应用程序期间它将执行的操作将查询是否已经有人登录,如果是,它将进入ChoosingProcActivity。我假设在您的SharedPrefManager实现中,您有一条代码可以知道是否存在登录用户。

在您的登录方法中,取消注释finish()方法

startActivity(new Intent(getApplicationContext(), ChoosingProcActivity.class));
//finish();

成功登录后,如果按“后退”按钮,将不会看到MainActivity。

在您的ChoosingProcActivity中,它看起来像这样:

@Override
protected void onStart() {
    super.onStart();

    if (!SharedPrefManager.getInstance(this).isLoggedIn()) {

            Intent intent = new Intent(this, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
            finish();
    }

}

基本上,它将询问是否有当前登录的用户,否则将返回MainActivity。

编辑,在注销中,您可以以此为基础来编写代码,

logoutComponent.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SharedPrefManager.getInstance(getActivity()).clear();
            Intent intent = new Intent(ChooseProcActivity.this, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
        }
    });