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);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。