android读写cookie的方法示例

做了一个android网络应用,要求用自己实现的webview去访问web网站,并且在远程登录成功之后把cookie写入到手机,保留用作以后的自动登录。找了好多资料。发觉读取cookies倒还用的很普遍,可是通过程序写cookie却没有太多资料。

先来看一下如何读取cookie吧:

try
    {
     DefaultHttpClient httpclient = new DefaultHttpClient();
     HttpGet httpget = new HttpGet("http://www.hlovey.com");
     HttpResponse response = httpclient.execute(httpget);
     HttpEntity entity = response.getEntity();
     List<Cookie> cookies = httpclient.getCookieStore().getCookies();
     if (entity != null) {
       entity.consumeContent();
     }

     if (cookies.isEmpty()) {
      Log.i(TAG, "NONE");
     } else {
       for (int i = 0; i < cookies.size(); i++) {
        Log.i(TAG,"- domain " + cookies.get(i).getDomain());
        Log.i(TAG,"- path " + cookies.get(i).getPath());
        Log.i(TAG,"- value " + cookies.get(i).getValue());
        Log.i(TAG,"- name " + cookies.get(i).getName());
        Log.i(TAG,"- port " + cookies.get(i).getPorts());
        Log.i(TAG,"- comment " + cookies.get(i).getComment());
        Log.i(TAG,"- commenturl" + cookies.get(i).getCommentURL());
        Log.i(TAG,"- all " + cookies.get(i).toString());
       }
     }
     httpclient.getConnectionManager().shutdown();

    }catch(Exception e){
     //Todo
    }finally{
    //Todo
    }

通过分析com.android.browser的源码,发现android默认的browser增加cookie是在数据库中增加记录,和window不同,win是采用一个txt文本文件的形式来存储cookie。而android是将cookie存储在数据库中。具体的介绍在《android cookie存储位置》一文中有介绍。我们都知道,android每个应用程序的存储空间都是独立的。不管使用preference还是database存储,都会在每个/data/data/package name/下面进行存储(preference存储在/data/data/package name/shared_prefs/xxxx.xml)。前面也说到cookie是存在数据库中,那么如果采用非浏览器访问网络需要保留cookie的话我们就应该在database中建立cookies表,并且存入相应的cookies数据。仿照默认broswer的代码:

/**声明一些数据库操作的常量*/
 private static SQLiteDatabase mDatabase = null;
 private static final String DATABASE_FILE = "webview.db";
 private static final String COOKIES_NAME_COL = "name";
 private static final String COOKIES_VALUE_COL = "value";
 private static final String COOKIES_DOMAIN_COL = "domain";
 private static final String COOKIES_PATH_COL = "path";
 private static final String COOKIES_EXPIRES_COL = "expires";
 private static final String COOKIES_SECURE_COL = "secure";
mDatabase = LoginApiActivity.this.openOrCreateDatabase(DATABASE_FILE, 0, null);
//创建cookie数据库
  if (mDatabase != null) {
   // cookies
   mDatabase.execSQL("CREATE TABLE IF NOT EXISTS cookies "
       + " (_id INTEGER PRIMARY KEY, "
       + COOKIES_NAME_COL + " TEXT, " + COOKIES_VALUE_COL
       + " TEXT, " + COOKIES_DOMAIN_COL + " TEXT, "
       + COOKIES_PATH_COL + " TEXT, " + COOKIES_EXPIRES_COL
       + " INTEGER, " + COOKIES_SECURE_COL + " INTEGER" + ");");
   mDatabase.execSQL("CREATE INDEX IF NOT EXISTS cookiesIndex ON "
       + "cookies" + " (path)");
  }
 }

/*写cookie*/
 public void addCookie(Cookie cookie) {
  if (cookie.getDomain() == null || cookie.getPath() == null || cookie.getName() == null
      || mDatabase == null) {
    return;
  }
  String mCookieLock = "asd";
  synchronized (mCookieLock) {
    ContentValues cookieVal = new ContentValues();
    cookieVal.put(COOKIES_DOMAIN_COL, cookie.getDomain());
    cookieVal.put(COOKIES_PATH_COL, cookie.getPath());
    cookieVal.put(COOKIES_NAME_COL, cookie.getName());
    cookieVal.put(COOKIES_VALUE_COL, cookie.getValue());

    mDatabase.insert("cookies", null, cookieVal);

  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 中cookie的处理详解

    android 客户端 Cookie处理 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明. 发起 Cookie是由服务器端生成,发送给User-Agent(一般是浏览器,客户端),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启

  • Android持久化保存cookie的方法

    在解析网页信息的时候,需要登录后才能访问,所以使用httpclient模拟登录,然后把cookie保存下来,以供下一次访问使用,这时就需要持久化cookie中的内容. 在之前先科普一下基础知识: 什么是Cookies? Cookies是一些小文件,它们被创建在客户端的系统里,或者被创建在客户端浏览器的内存中(如果是临时性的话).用它可以实现状态管理的功能.我们可以存储一些少量信息到可以短的系统上,以便在需要的时候使用.最有趣的事情是,它是对用户透明的.在你的web应用程序中,你可以到处使用它,它

  • AndroidHttpClient使用Cookie应用分析

    今天想把一个用使用了HttpClient的自动签到小程序移植到Android上,还好Android的SDK自带了HttpClient的包.翻Android的文档时发现官方还提供了一个实现了HttpClient接口的AndroidHttpClient,上网搜了下没发现关于AndroidHttpClient的文章.当然也可以继续使用DefaultHttpClient,但用为Android定制的AndroidHttpClient自然更好. 下面是2个测试用的HttpServlet: 复制代码 代码如下

  • android实现http中请求访问添加cookie的方法

    本文实例讲述了android实现http中请求访问添加cookie的方法.分享给大家供大家参考,具体如下: 第一种 HashMap<String, String> map = new HashMap<String, String>(); map.put("cookie","p1u_id=4eb591e73554db0f4d3300cb656113abfb968ef6b0ee2b5de0a35caa5217c51faa028b453576b35c&quo

  • Android 登录Web 时对cookie 处理

    对于登录功能本身没有任何特别,使用httpclient向服务器post用户名密码即可. 但是为了保持登录的状态(在各个Activity之间切换时要让网站知道用户一直是处于登录的状态)就需要进行cookie的读写. httpclient相当强大,读写cookie非常容易: CookieStore cookies=((AbstractHttpClient)client).getCookieStore();//读cookie ((AbstractHttpClient) client).setCooki

  • android读写cookie的方法示例

    做了一个android网络应用,要求用自己实现的webview去访问web网站,并且在远程登录成功之后把cookie写入到手机,保留用作以后的自动登录.找了好多资料.发觉读取cookies倒还用的很普遍,可是通过程序写cookie却没有太多资料. 先来看一下如何读取cookie吧: try { DefaultHttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet("http://www.hlov

  • Java用GDAL读写shapefile的方法示例

    GDAL介绍 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象数据模型来表达所支持的各种文件格式.它还有一系列命令行工具来进行数据转换和处理. GDAL官方网址:http://www.gdal.org/,它能支持当前流行的各种地图数据格式,包括栅格和矢量地图,具体参考官方网站.该库使用C/C++开发,在Java中使用需要自己编译,具体编译过程这里就不说了,下面来看看本文的主要内容吧. Java使用G

  • springboot结合mysql主从来实现读写分离的方法示例

    1.实现的功能 基于springboot框架,application.yml配置多个数据源,使用AOP以及AbstractRootingDataSource.ThreadLocal来实现多数据源切换,以实现读写分离.mysql的主从数据库需要进行设置数据之间的同步. 2.代码实现 application.properties中的配置 spring.datasource.druid.master.driver-class-name=com.mysql.jdbc.Driver spring.data

  • Android如何读写CSV文件方法示例

    前言 本文主要给大家介绍的是关于Android读写CSV文件的相关内容,CSV也就是Comma-Separated Values逗号分隔的文本文件, 读写csv文件和读写普通文件类似:写的时候给数据之间添加上逗号. 设定存储路径和文件名: private static final String FILE_FOLDER = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "AboutVie

  • Android裁剪图像实现方法示例

    本文实例讲述了Android裁剪图像实现方法.分享给大家供大家参考,具体如下: package com.xiaoma.piccut.demo; import java.io.File; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.B

  • Yii框架Session与Cookie使用方法示例

    本文实例讲述了Yii框架Session与Cookie使用方法.分享给大家供大家参考,具体如下: Yii Session使用 public function actionIndex(){ $session = \YII::$app->session; //判断session是否开启 if(!$session->isActive) { //未开启,需要开启 $session->open(); } //设置session $session->set('user_name','zhangs

  • C# javascript 读写Cookie的方法

    第一:写Cookies 复制代码 代码如下: Response.Cookies["UserName"].Value="Guest"; Response.Cookies["UserName"].Expires=DateTime.Now.AddDays(1); 第二:添加Cookies 复制代码 代码如下: HttpCookie userName_zhengshu_Cookie = new HttpCookie("uname");

  • Node.js 使用axios读写influxDB的方法示例

    Node.js读写数据到influxDB,目前已经有一个库node-influx, 这个库功能非常强大,但是我个人使用这个库的时候,遇到无法解决的问题. 使用curl都可以写数据到influxDB,但是用node-influx总是报错,搞了半天也无法解决,就索性不用它了. influxDB提供HTTP的API,也就是说Node.js中的axios或者request等HTTP客户端工具是可以直接和influx交互的. 需要注意的一点是,写到influxDB的数据格式必须是二进制流. 为此,要做两件

  • python实现12306登录并保存cookie的方法示例

    经过倒腾12306的登录,还是实现了,请求头很重要...各位感兴趣的可以继续写下去..... import sys import time import requests from PIL import Image import json import os import Headers import SessionUtil import UrlUtils class Ticket(object): def __init__(self): self.answer = { "1": &q

  • android 识别U盘以及读写文件的方法

    android中读写文件的需求地方很多,其中就包括了识别U盘,弹出U盘,读写U盘的文件等. 那么,如何实现这些需求呢?笔者简单的说下: 1.识别U盘: 识别U盘的方法只要是用到了2个android官方类. 它们分别为:ContentResolver和AsyncQueryHandler.表现为前者提供内容给后者读取. 作法如下: 1)获取状态并遍历 contentObserver = new ContentObserver(mHandler) { @Override public void onC

随机推荐