zoukankan      html  css  js  c++  java
  • Android学习笔记_65_登录功能本身没有任何特别

    对于登录功能本身没有任何特别,使用httpclient向服务器post用户名密码即可。
    但是为了保持登录的状态(在各个Activity之间切换时要让网站知道用户一直是处于登录的状态)就需要进行cookie的读写。

    httpclient相当强大,读写cookie非常容易:
    CookieStore cookies=((AbstractHttpClient)client).getCookieStore();//读cookie
    ((AbstractHttpClient) client).setCookieStore(cookies);//写cookie

    另外的一个问题是,为了在各个activity之间使用一个共通的cookie,需要一个全局变量来解决问题。对于java来说,可以使用静态类,但是对于android来说,更符合android结

    构的作法是使用拥有这些activity的application类:
    首先声明一个application类用来存取cookie:
    public class myApp extends Application {

    private CookieStore cookies;
    public CookieStore getCookie(){
    return cookies;
    }
    public void setCookie(CookieStore cks){
    cookies = cks;
    }
    }
    另外,要在AndroidManifest.xml文件中将上面声明的这个类绑定到包含所有activity的application上,方法是为application标签加 android:name=".myApp"
    这样就可以在Activity中使用这个“全局变量”了:
    //设置cookie
    myApp appCookie = ((myApp)getApplication());
    appCookie.setCookie(cookies);
    //读取cookie
    myApp appCookie = ((myApp)getApplicationContext());
    cookies = appCookie.getCookie();

    经过以上的步骤,android程序完成一个Web登录后就可以保持登录的状态了。

    ps.
    从一个httpclient取得statuscode的方法:
    HttpResponse response = client.execute(mypost);
    int statuscode = response.getStatusLine().getStatusCode();



    做的一个是要登录自己的图书馆账号,用于查看自己所借阅的书籍,
    看了一下图书馆的代码,发现是POST用户名和密码,
    而在代码实现主要有两个难点:一、保存账号密码 二、保存Cookie
    那么 ,第一个可以使用之前提到过的Sharedpreference ,每次就直接从sharedpreference里获取账号名和密码就可以了,不需要每次都输入

    第二个怎么获得服务器的cookie呢,知道这次的session id
    通过Httpclient 中的getcookiestore

    List<Cookie> cookies = httpclient.getCookieStore().getCookies();
    if (cookies.isEmpty()) {
    Log.i(TAG, "-------Cookie NONE---------");
    } else {
    for (int i = 0; i < cookies.size(); i ) {
    //保存cookie
    cookie = cookies.get(i);
    Log.d(TAG, cookies.get(i).getName() "=" cookies.get(i).getValue() );
    }

    获得了session id后,怎么再添加到我们的POST或者GET请求里面呢,

    HttpPost httpPost = new HttpPost(访问地址);
    httpPost.setHeader("Cookie", "JSESSIONID=" + 我们在静态变量里存放的SessionId);
    HttpResponse httpResponse = httpclient.execute(httpPost);



    HttpGet request = new HttpGet(url+"?"+Params);
    request.setHeader("Cookie",Sessionid);

    http://www.cnblogs.com/cosiray/archive/2012/05/09/2491485.html

  • 相关阅读:
    UITableViewCell 获取当前位置
    iOS图片拉伸
    TCP/IP基础
    AFNetworking报错"_UTTypeCopyPreferredTagWithClass", referenced from: _AFContentTypeForPathExtens
    iOS 后台处理
    统计iOS项目的总代码行数的方法
    iOS自定义model排序
    iOS开发 适配iOS10
    中文 iOS/Mac 开发博客列表
    C#--静态构造函数
  • 原文地址:https://www.cnblogs.com/lbangel/p/3592770.html
Copyright © 2011-2022 走看看