android读写cookie的方法示例
做了一个android网络应用,要求用自己实现的webview去访问web网站,并且在远程登录成功之后把cookie写入到手机,保留用作以后的自动登录。找了好多资料。发觉读取cookies倒还用的很普遍,可是通过程序写cookie却没有太多资料。
先来看一下如何读取cookie吧:
try { DefaultHttpClienthttpclient=newDefaultHttpClient(); HttpGethttpget=newHttpGet("http://www.hlovey.com"); HttpResponseresponse=httpclient.execute(httpget); HttpEntityentity=response.getEntity(); Listcookies=httpclient.getCookieStore().getCookies(); if(entity!=null){ entity.consumeContent(); } if(cookies.isEmpty()){ Log.i(TAG,"NONE"); }else{ for(inti=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(Exceptione){ //Todo }finally{ //Todo }
通过分析com.android.browser的源码,发现android默认的browser增加cookie是在数据库中增加记录,和window不同,win是采用一个txt文本文件的形式来存储cookie。而android是将cookie存储在数据库中。具体的介绍在《androidcookie存储位置》一文中有介绍。我们都知道,android每个应用程序的存储空间都是独立的。不管使用preference还是database存储,都会在每个/data/data/packagename/下面进行存储(preference存储在/data/data/packagename/shared_prefs/xxxx.xml)。前面也说到cookie是存在数据库中,那么如果采用非浏览器访问网络需要保留cookie的话我们就应该在database中建立cookies表,并且存入相应的cookies数据。仿照默认broswer的代码:
/**声明一些数据库操作的常量*/ privatestaticSQLiteDatabasemDatabase=null; privatestaticfinalStringDATABASE_FILE="webview.db"; privatestaticfinalStringCOOKIES_NAME_COL="name"; privatestaticfinalStringCOOKIES_VALUE_COL="value"; privatestaticfinalStringCOOKIES_DOMAIN_COL="domain"; privatestaticfinalStringCOOKIES_PATH_COL="path"; privatestaticfinalStringCOOKIES_EXPIRES_COL="expires"; privatestaticfinalStringCOOKIES_SECURE_COL="secure"; mDatabase=LoginApiActivity.this.openOrCreateDatabase(DATABASE_FILE,0,null); //创建cookie数据库 if(mDatabase!=null){ //cookies mDatabase.execSQL("CREATETABLEIFNOTEXISTScookies" +"(_idINTEGERPRIMARYKEY," +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("CREATEINDEXIFNOTEXISTScookiesIndexON" +"cookies"+"(path)"); } } /*写cookie*/ publicvoidaddCookie(Cookiecookie){ if(cookie.getDomain()==null||cookie.getPath()==null||cookie.getName()==null ||mDatabase==null){ return; } StringmCookieLock="asd"; synchronized(mCookieLock){ ContentValuescookieVal=newContentValues(); 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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。