保存会话Android

时间:2014-08-02 13:24:05

标签: java android session sharedpreferences

我想让我的应用保存会话,以便在我杀死进程时不再登录:当我登录Main.java时,我会将我重定向到Menu.java然后在我再次杀死进程后他应该采取一个runit我没有登录就直接发送到Menu.java并保存了用户名

完全像这个图图http://www.tutorialspoint.com/android/android_session_management.htm

这是Main.java“登录页面”

public class Main extends Activity {
Button b;
EditText et,pass;
TextView tv;
HttpPost httppost;
StringBuffer buffer;
HttpResponse response;
HttpClient httpclient;
List<NameValuePair> nameValuePairs;
ProgressDialog dialog = null;

public static final String data = "ett";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button exit = (Button)findViewById(R.id.button18);

   exit.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            finish();
            Intent exit = new Intent(Intent.ACTION_MAIN);
            exit.addCategory(Intent.CATEGORY_HOME);
            exit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(exit);

        }
    });

    b = (Button)findViewById(R.id.Button01);  
    et = (EditText)findViewById(R.id.username);
    pass= (EditText)findViewById(R.id.password);
    tv = (TextView)findViewById(R.id.tv);

    b.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog = ProgressDialog.show(Main.this, "", 
                    "Verification ...", true);
             new Thread(new Runnable() {
                    public void run() {
                        login();                          
                    }
                  }).start();               
        }
    });
}

void login(){
    try{            

        httpclient=new DefaultHttpClient();
        httppost= new HttpPost("http://192.168.1.4/android/etc.php"); // make sure the url is correct.
        //add your data
        nameValuePairs = new ArrayList<NameValuePair>(2);
        // Always use the same variable name for posting i.e the android side variable name and php side variable name should be similar, 
        nameValuePairs.add(new BasicNameValuePair("username",et.getText().toString().trim()));  // $Edittext_value = $_POST['Edittext_value'];
        nameValuePairs.add(new BasicNameValuePair("password",pass.getText().toString().trim())); 
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        //Execute HTTP Post Request
        response=httpclient.execute(httppost);
        // edited by James from coderzheaven.. from here....
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        final String response = httpclient.execute(httppost, responseHandler);
        System.out.println("Response : " + response); 
        runOnUiThread(new Runnable() {
            public void run() {
                tv.setText("Response from PHP : " + response);
                dialog.dismiss();
            }
        });

        if(response.equalsIgnoreCase("User Found")){
            runOnUiThread(new Runnable() {
                public void run() {
                    Toast.makeText(Main.this,"Login Success", Toast.LENGTH_SHORT).show();
                }
            });

            SharedPreferences setting = getSharedPreferences(data, 0);
            SharedPreferences.Editor editor = setting.edit();
            editor.putString("et", et.getText().toString());
            editor.commit();
            Intent intent=new Intent(Main.this, Menu.class);

            startActivity(intent);
        }else{
            showAlert();                
        }

    }catch(Exception e){
        dialog.dismiss();
        System.out.println("Exception : " + e.getMessage());
    }
}
public void showAlert(){
    Main.this.runOnUiThread(new Runnable() {
        public void run() {
            AlertDialog.Builder builder = new AlertDialog.Builder(Main.this);
            builder.setTitle("Erreur d'identification");
            builder.setMessage("Code ou mot de passe incorrecte")  
                   .setCancelable(false)
                   .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                       }
                   });     

            AlertDialog alert = builder.create();
            alert.show();               
        }
    });


}

}

Menu.java这个应用程序应该在保存会话后启动

public class Menu extends ActionBarActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.menus);

    Button button1 = (Button)findViewById(R.id.button1);
    Button button3 = (Button)findViewById(R.id.button3);
    Button button4 = (Button)findViewById(R.id.button4);
    Button button14 = (Button)findViewById(R.id.button14);
    Button button5 = (Button)findViewById(R.id.button5);
    Button exit = (Button)findViewById(R.id.button18);

    button1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent1 = new Intent(Menu.this, emploi.class);
            startActivity(intent1);
        }
    });

    button3.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent2 = new Intent(Menu.this, Maritimnews.class);
            startActivity(intent2);
        }
    });

    button4.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent3 = new Intent(Menu.this, Resultats.class);
            startActivity(intent3);
        }
    });

    button14.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent4 = new Intent(Menu.this, Demande.class);
            startActivity(intent4);
        }
    });

    button5.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent5 = new Intent(Menu.this, Apropos.class);
            startActivity(intent5);
        }
    });

    exit.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            finish();
            Intent exit = new Intent(Intent.ACTION_MAIN);
            exit.addCategory(Intent.CATEGORY_HOME);
            exit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(exit);

        }
    });


    }



}

我不知道我在哪里准确地使用sharedprefer来保存会话 那里的共享偏好只是为了在Main.java和Menu.java之间传递数据 我不想添加另一个sheredPreferences来保存像facebook这样的会话意味着我在Main.java登录--- redirecte - &gt; Menu.java如果我再次关闭运行应用程序,他将从Menu.java :)开始,谢谢

2 个答案:

答案 0 :(得分:0)

如果您以这种方式实施,用户将只在您的应用程序中登录一次,并将永久连接。最好的方法是这样做: 首先添加一个复选框进行登录,让用户决定是否要保存他的登录信息。 如果选中则添加共享首选项,如果取消选中则删除共享首选项。 读取主活动的onresume()方法中的sharedpreferences,并在首选项不为null时直接向菜单活动添加一些逻辑

答案 1 :(得分:0)

我使用mySharedPreferences指示用户是否已登录,并且我从之前的活动传递一个int值,以了解用户是否只是输入了应用程序。

public class ConnectWithFaceBookActivity extends Activity{

    int mode = Activity.MODE_PRIVATE;
    private SharedPreferences  mySharedPreferences;
    private String TAG = "ConnectWithFaceBookActivity";  
    private TextView lblEmail;
    private String accessToken;

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

        mySharedPreferences =  this.getSharedPreferences( "facebook", Context.MODE_PRIVATE);
        final SharedPreferences.Editor editor= mySharedPreferences.edit();
        lblEmail = (TextView) findViewById(R.id.lblEmail);
        LoginButton authButton = (LoginButton) findViewById(R.id.authButton);
        Intent i = getIntent();
        int logout = i.getIntExtra("LOGOUT", 0);

        //checking if already sign in
        if(logout!=1 && mySharedPreferences.getString("email","")!="")//1 represent logout button preesed
        {
            String mString;
            mString= mySharedPreferences.getString("email","");
            lblEmail.setText(mString);

            Intent intent = new Intent(getApplicationContext(),MainActivity.class); 
            startActivity(intent);
            finish();  
        }

        authButton.setOnErrorListener(new OnErrorListener() {

            @Override
            public void onError(FacebookException error) {
                Log.i(TAG, "Error " + error.getMessage());
            }
        }); 

        // set permission list, Don't foeget to add email
        authButton.setReadPermissions(Arrays.asList("public_profile","user_friends","email"));

        // session state call back event
        authButton.setSessionStatusCallback(new Session.StatusCallback() 
        {
            @Override
            public void call(Session session, SessionState state, Exception exception) 
            {

                Boolean open = session.isOpened();

                if (open) 
                {
                    Log.i(TAG,"Access Token"+ session.getAccessToken());
                    accessToken = session.getAccessToken();
                    Request.newMeRequest (session, new Request.GraphUserCallback() 
                    {
                        @Override
                        public void onCompleted(GraphUser user,Response response) 
                        {
                            if (user != null) 
                            { 
                                Log.i(TAG,"User ID "+ user.getId());
                                Log.i(TAG,"Email "+ user.asMap().get("email"));
                                String str = user.asMap().get("email").toString();
                                lblEmail.setText(str);

                                editor.putBoolean("isLogIn",true);
                                editor.putString("email",str);

                                //save the changes that you made
                                editor.commit();
                                Intent intent = new Intent(getApplicationContext(),MainActivity.class); 
                                startActivity(intent);
                                finish();
                            }
                        }
                    }).executeAsync();
                }
                else
                {
                    editor.putBoolean("isLogIn",false);
                    editor.putString("email","");

                    //save the changes that you made
                    editor.commit();
                }
            }
        });
    }

    public static void callFacebookLogout(Context context) {
        Session session = Session.getActiveSession();
        if (session != null) {
            if (!session.isClosed()) {
                session.closeAndClearTokenInformation();
                //clear your preferences if saved
            }
        } else {

            session = new Session(context);
            Session.setActiveSession(session);

            session.closeAndClearTokenInformation();
                //clear your preferences if saved
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
    }
}