如何在我的应用程序上放置会话,以便在关闭应用程序后我不需要再次登录?

时间:2017-01-03 05:23:54

标签: android facebook session login

我正在创建一个登录页面,如果用户登录订单,他可以订购他的请求等,即使在关闭应用程序后,如果他再次打开应用程序,他不需要再次登录..我也有facebook按钮但是那是另一回事......亲切的帮助? 这是我的代码:

public class Login extends AppCompatActivity {
    private String eml;
    private String pswrd;
    private ProfileTracker mProfileTracker;
    private ProgressDialog pDialog;
    String status = "";
    private Button fbbutton;
    Profile profile;
    Button login;

    // private int serverResponseCode = 0;
    TextView tac1;
    EditText email, pass;
    private static String url_create_book = "http://cloud.....com/broccoli/login.php";
    public static CallbackManager callbackmanager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(this);
        setContentView(R.layout.activity_login);
        Get_hash_key();
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);





       // AppEventsLogger.activateApp(this);

        fbbutton = (Button) findViewById(R.id.fbtn);

        fbbutton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // Call private method
                onFblogin();
            }
        });

        email = (EditText)findViewById(R.id.email);
        pass = (EditText) findViewById(R.id.password);

        tac1 = (TextView)findViewById(R.id.cAcc);

        tac1.setOnClickListener(new View.OnClickListener()

                                {

                                    @Override
                                    public void onClick(View v) {


                                        startActivity(new Intent(Login.this, RegistrationForm.class));


                                    }
                                }

        );

        login = (Button) findViewById(R.id.lbtn);
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                pDialog = new ProgressDialog(Login.this);
                pDialog.setMessage("Please wait..");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(true);
                pDialog.show();
                eml = email.getText().toString();
                pswrd = pass.getText().toString();


                // new CreateNewProduct().execute();
                StringRequest stringRequest = new StringRequest(Request.Method.POST, url_create_book,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                                pDialog.dismiss();
                                if (response.trim().equals("success")) {
                                    Toast.makeText(Login.this, "Login Success", Toast.LENGTH_SHORT).show();
                                    startActivity(new Intent(Login.this, Home.class));
                                    //your intent code here
                                } else {
                                    Toast.makeText(Login.this, "username/password incorrect", Toast.LENGTH_SHORT).show();

                                }
                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                pDialog.dismiss();
                                Toast.makeText(Login.this, error.toString(), Toast.LENGTH_LONG).show();
                            }
                        }) {
                    @Override
                    protected Map<String, String> getParams() {
                        Map<String, String> params = new HashMap<String, String>();
                        params.put("email", eml);
                        params.put("password", pswrd);

                        return params;
                    }
                };
                RequestQueue requestQueue = Volley.newRequestQueue(Login.this);
                requestQueue.add(stringRequest);

            }

        });
    }


    public void Get_hash_key() {
        PackageInfo info;
        try {
            info = getPackageManager().getPackageInfo("com.example.zeba.broccoli", PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md;
                md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String something = new String(Base64.encode(md.digest(), 0));
                //String something = new String(Base64.encodeBytes(md.digest()));
                Log.e("hash key", something);
            }
        } catch (PackageManager.NameNotFoundException e1) {
            Log.e("name not found", e1.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("no such an algorithm", e.toString());
        } catch (Exception e) {
            Log.e("exception", e.toString());
        }
    }




    private void onFblogin() {
        callbackmanager = CallbackManager.Factory.create();

        // Set permissions
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email", "user_photos", "public_profile"));

        LoginManager.getInstance().registerCallback(callbackmanager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        try {
                            if (Profile.getCurrentProfile() == null) {
                                mProfileTracker = new ProfileTracker() {
                                    @Override
                                    protected void onCurrentProfileChanged(Profile profile_old, Profile profile_new) {
                                        // profile2 is the new profile
                                        profile = profile_new;
                                        mProfileTracker.stopTracking();
                                    }
                                };
                                mProfileTracker.startTracking();
                            } else {
                                profile = Profile.getCurrentProfile();
                            }

                            GraphRequest request = GraphRequest.newMeRequest(
                                    loginResult.getAccessToken(),
                                    new GraphRequest.GraphJSONObjectCallback() {
                                        @Override
                                        public void onCompleted(JSONObject object, GraphResponse response) {
                                            Log.v("FACEBOOK LOGIN", response.toString());
                                            // Application code
                                            try {
                                                String fb_id = object.getString("id");
                                                String fb_name = object.getString("name");
                                                String profilePicUrl = "https://graph.facebook.com/" + fb_id + "/picture?width=200&height=200";
                                                String fb_gender = object.getString("gender");
                                                String fb_email = object.getString("email");
                                                String fb_birthday = object.getString("birthday");
                                            } catch (JSONException e) {
                                                e.printStackTrace();
                                            }

                                            //use shared preferences here
                                        }
                                    });
                            Bundle parameters = new Bundle();
                            parameters.putString("fields", "id,name,email,gender,birthday,picture.type(small)");
                            request.setParameters(parameters);
                            request.executeAsync();


                            //go to Home page
                            Intent intent = new Intent(getApplicationContext(), Home.class);
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(intent);
                            finish();
                        } catch (Exception e) {
                            Log.d("ERROR", e.toString());
                        }
                    }


                    @Override
                    public void onCancel() {
                        // Log.d(TAG_CANCEL, "On cancel");
                    }

                    @Override
                    public void onError(FacebookException error) {
                        //Log.d(TAG_ERROR, error.toString());
                    }



                    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                        callbackmanager.onActivityResult(requestCode, resultCode, data);
                    }
                });




    }



    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

}

p.s我是android的新手,所以给出了编码的答案,并尝试用正确的代码替换我的代码... thx提前

4 个答案:

答案 0 :(得分:3)

您可以使用共享偏好设置,在共享偏好设置中保存您的用户名, 并检查主要启动活动(例如,如果您将活动作为启动器活动登录),如果用户名存在,则使用意图将用户重定向到其他活动,否则请求用户再次登录。

希望它对你有所帮助。

当我第一次登录时我在登录后这样做了(如果你不知道如何使用它,请阅读共享偏好)

CommonObjects.saveSharedPreferences(Login.this, "user_id", user_id);
CommonObjects.saveSharedPreferences(Login.this, "name", name);

这我关闭了我的应用程序并再次打开应用程序,因此我的登录活动是第一个在我打开我的应用程序时首先显示的活动,然后在登录活动的最开始时执行此操作

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

        if (CommonObjects.hasSharedPreference(context,"user_id")){
            Intent intMain=new Intent(Login.this,DashboardActivity.class);
            startActivity(intMain);
            finish();
        }
}
希望你现在明白。

答案 1 :(得分:1)

    public class Login extends AppCompatActivity {
        private String eml;
        private String pswrd;
        private ProfileTracker mProfileTracker;
        private ProgressDialog pDialog;
        String status = "";
        private Button fbbutton;
        Profile profile;
        Button login;

        // private int serverResponseCode = 0;
        TextView tac1;
        EditText email, pass;
        private static String url_create_book = "http://cloud.....com/broccoli/login.php";
        public static CallbackManager callbackmanager;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            FacebookSdk.sdkInitialize(getApplicationContext());
            AppEventsLogger.activateApp(this);
            setContentView(R.layout.activity_login);
            Get_hash_key();
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);



     SharedPreferences sf_shared_pref = getSharedPreferences("variable", 0);
        Boolean on_time_login = sf_shared_pref.getBoolean("flag", false);

        if (on_time_login) {

                Intent intent = new Intent(getApplicationContext(), HomeClass.class);
                startActivity(intent);

        }

           // AppEventsLogger.activateApp(this);

            fbbutton = (Button) findViewById(R.id.fbtn);

            fbbutton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // Call private method
                    onFblogin();
                }
            });

            email = (EditText)findViewById(R.id.email);
            pass = (EditText) findViewById(R.id.password);

            tac1 = (TextView)findViewById(R.id.cAcc);

            tac1.setOnClickListener(new View.OnClickListener()

                                    {

                                        @Override
                                        public void onClick(View v) {


                                            startActivity(new Intent(Login.this, RegistrationForm.class));


                                        }
                                    }

            );

            login = (Button) findViewById(R.id.lbtn);
            login.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {


                    pDialog = new ProgressDialog(Login.this);
                    pDialog.setMessage("Please wait..");
                    pDialog.setIndeterminate(false);
                    pDialog.setCancelable(true);
                    pDialog.show();
                    eml = email.getText().toString();
                    pswrd = pass.getText().toString();


                    // new CreateNewProduct().execute();
                    StringRequest stringRequest = new StringRequest(Request.Method.POST, url_create_book,
                            new Response.Listener<String>() {
                                @Override
                                public void onResponse(String response) {
                                    pDialog.dismiss();
                                    if (response.trim().equals("success")) {
                                        Toast.makeText(Login.this, "Login Success", Toast.LENGTH_SHORT).show();
 SharedPreferences settings = getApplicationContext().getSharedPreferences("variable", MODE_PRIVATE); // 0 - for private mode
                    SharedPreferences.Editor editor = settings.edit();
                      editor.putBoolean("flag", true);
                    editor.apply();

                                        startActivity(new Intent(Login.this, Home.class));
                                        //your intent code here
                                    } else {
                                        Toast.makeText(Login.this, "username/password incorrect", Toast.LENGTH_SHORT).show();

                                    }
                                }
                            },
                            new Response.ErrorListener() {
                                @Override
                                public void onErrorResponse(VolleyError error) {
                                    pDialog.dismiss();
                                    Toast.makeText(Login.this, error.toString(), Toast.LENGTH_LONG).show();
                                }
                            }) {
                        @Override
                        protected Map<String, String> getParams() {
                            Map<String, String> params = new HashMap<String, String>();
                            params.put("email", eml);
                            params.put("password", pswrd);

                            return params;
                        }
                    };
                    RequestQueue requestQueue = Volley.newRequestQueue(Login.this);
                    requestQueue.add(stringRequest);

                }

            });
        }


        public void Get_hash_key() {
            PackageInfo info;
            try {
                info = getPackageManager().getPackageInfo("com.example.zeba.broccoli", PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md;
                    md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    String something = new String(Base64.encode(md.digest(), 0));
                    //String something = new String(Base64.encodeBytes(md.digest()));
                    Log.e("hash key", something);
                }
            } catch (PackageManager.NameNotFoundException e1) {
                Log.e("name not found", e1.toString());
            } catch (NoSuchAlgorithmException e) {
                Log.e("no such an algorithm", e.toString());
            } catch (Exception e) {
                Log.e("exception", e.toString());
            }
        }




        private void onFblogin() {
            callbackmanager = CallbackManager.Factory.create();

            // Set permissions
            LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email", "user_photos", "public_profile"));

            LoginManager.getInstance().registerCallback(callbackmanager,
                    new FacebookCallback<LoginResult>() {
                        @Override
                        public void onSuccess(LoginResult loginResult) {
                            try {
                                if (Profile.getCurrentProfile() == null) {
                                    mProfileTracker = new ProfileTracker() {
                                        @Override
                                        protected void onCurrentProfileChanged(Profile profile_old, Profile profile_new) {
                                            // profile2 is the new profile
                                            profile = profile_new;
                                            mProfileTracker.stopTracking();
                                        }
                                    };
                                    mProfileTracker.startTracking();
                                } else {
                                    profile = Profile.getCurrentProfile();
                                }

                                GraphRequest request = GraphRequest.newMeRequest(
                                        loginResult.getAccessToken(),
                                        new GraphRequest.GraphJSONObjectCallback() {
                                            @Override
                                            public void onCompleted(JSONObject object, GraphResponse response) {
                                                Log.v("FACEBOOK LOGIN", response.toString());
                                                // Application code
                                                try {
                                                    String fb_id = object.getString("id");
                                                    String fb_name = object.getString("name");
                                                    String profilePicUrl = "https://graph.facebook.com/" + fb_id + "/picture?width=200&height=200";
                                                    String fb_gender = object.getString("gender");
                                                    String fb_email = object.getString("email");
                                                    String fb_birthday = object.getString("birthday");
                                                } catch (JSONException e) {
                                                    e.printStackTrace();
                                                }

                                                //use shared preferences here
                                            }
                                        });
                                Bundle parameters = new Bundle();
                                parameters.putString("fields", "id,name,email,gender,birthday,picture.type(small)");
                                request.setParameters(parameters);
                                request.executeAsync();


                                //go to Home page
                                Intent intent = new Intent(getApplicationContext(), Home.class);
                                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                startActivity(intent);
                                finish();
                            } catch (Exception e) {
                                Log.d("ERROR", e.toString());
                            }
                        }


                        @Override
                        public void onCancel() {
                            // Log.d(TAG_CANCEL, "On cancel");
                        }

                        @Override
                        public void onError(FacebookException error) {
                            //Log.d(TAG_ERROR, error.toString());
                        }



                        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                            callbackmanager.onActivityResult(requestCode, resultCode, data);
                        }
                    });




        }



        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case android.R.id.home:
                    onBackPressed();
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }

    }

答案 2 :(得分:0)

.*

答案 3 :(得分:0)

为此,您可以使用“ SharedPreferences ”。 当用户登录应用程序时,将一个布尔变量保存:“USERLOGGED_IN”保存到共享首选项中,如下所示:
以下代码将写在“AsyncTask”中:

 SharedPreferences prefs;
Editor editor = prefs.edit();<br></br>
        editor .putBoolean("USERLOGGED_IN",true); //If user has logged in successfully<br></br>
//or
        editor .putBoolean("USERLOGGED_IN",false);//If user has not logged in<br></br>
editor.commit();

一旦将值保存在“SharedPreferences”中,剩下的唯一事情就是在用户再次打开应用程序时检查此值。  然后这样做:

 SharedPreferences prefs;
boolean USERLOGGED_IN  = prefs.getBoolean("USERLOGGED_IN"); // the value you saved during logging in the user.
if(USERLOGGED_IN == true)
{
    //User has logged in already, so direct the user to home screen.
}
else
{
    //User is new, so direct the user to login screen.
}

我希望这会有所帮助。