`
river418
  • 浏览: 27345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Android:SNS客户端开发三:数据库操作(一)

 
阅读更多

      在对账号进行操作的过程中,不可避免的会使用到数据库,存储相应的账号信息。本文结合SNS客户端项目简单讲述Android上有关数据库的部分操作。

      Android上采用SQLite数据库,作为一款轻型数据库,它在Android上有着很好的表现,操作起来也十分简单。在这里也像大家推荐一款SQLite的可视化查看工具SQLite Database Browser。大家可以把Android设备中对应应用的数据库导出,并通过SQLite Database Browser查看数据库里的信息。

   首先在Android上操作SQLite需要一个工具类,我们使用这个类来控制数据版本,打开数据库以及创建对应的数据表:

public class DBHelper extends SQLiteOpenHelper {

	private static final int VERSION = 1;
	private String create_usertb;
	private String create_contexttb;
	private String create_typetb;

	public DBHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}

	public DBHelper(Context context, String name, int version) {
		this(context, name, null, version);
	}

	public DBHelper(Context context, String name) {
		this(context, name, VERSION);
	}

	public DBHelper(Context context, String name, String create_usertb ) {
		this(context, name, VERSION);
		this.create_usertb = create_usertb;
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		db.execSQL(create_usertb);// 生成用户信息表
		System.out.println("生成user表");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		System.out.print("数据库版本" + newVersion);
		db.execSQL(create_usertb);// 更新用户信息表
		System.out.println("生成user表");
		
	}

}

 然后我们在DBOperate中对数据库进行具体操作。

public class DBOperate {

	// 数据库名称SNSHelper
	// user表,weibotext表
	private static final String DB_NAME = "SNSHelper";
	private static final String CREATE_USERTB = "create table if not exists user"
			+ "(id INTEGER PRIMARY KEY AUTOINCREMENT,userid varchar(50),name varchar(20),type varchar(20),nickname varchar(20),"
			+ "access_token varchar(50),access_secret varchar(50),icon blob)";
	private Context context;

	public DBOperate(Context context) {
		this.context = context;
	}

	public Boolean initDB() {//初始化数据库,程序第一次启动时操作

		DBHelper dbhelper = new DBHelper(context, DB_NAME, CREATE_USERTB);
		SQLiteDatabase db = dbhelper.getReadableDatabase();
		if (db.isOpen()) {
			db.close();
			return true;
		} else {
			return false;
		}
	}

	public Long insertUser(ContentValues values) {//添加用户操作

		DBHelper dbhelper = new DBHelper(context, DB_NAME);
		SQLiteDatabase db = dbhelper.getReadableDatabase();
		Long row_id = db.insert("user", null, values);
		db.close();
		return row_id;

	}

	public Boolean isExist(ContentValues values) {//检查改用户是否存在
		List<UserInfo> userlist = new ArrayList<UserInfo>();
		userlist = findAllUser();
		for (int i = 0; i < userlist.size(); i++) {
			if (userlist.get(i).getAccess_secret()
					.equalsIgnoreCase(values.get("access_secret").toString())
					&& userlist
							.get(i)
							.getAccess_token()
							.equalsIgnoreCase(
									values.get("access_token").toString())) {
				return true;
			}else{
				return false;
			}
		}
		if (userlist.size() == 0) {
			return false;
		} else {
			return true;
		}

	}
public List<UserInfo> findAllUser() {//查找所有的用户

		List<UserInfo> userlist = new ArrayList<UserInfo>();
		DBHelper dbhelper = new DBHelper(context, DB_NAME);
		SQLiteDatabase db = dbhelper.getReadableDatabase();
		Cursor cursor = db.query("user", null, null, null, null, null,
				"id desc");
		cursor.moveToFirst();
		while ((!cursor.isAfterLast()) && (cursor.getString(1) != null)) {
			UserInfo user = new UserInfo();
			int id = cursor.getInt(cursor.getColumnIndex("id"));
			user.setId(id);
			String userid = cursor.getString(cursor.getColumnIndex("userid"));
			System.out.println("++++++++++" + userid + "+++++++++");
			user.setName(userid);
			String name = cursor.getString(cursor.getColumnIndex("name"));
			System.out.println("++++++++++" + name + "+++++++++");
			user.setName(name);
			String nickname = cursor.getString(cursor.getColumnIndex("nickname"));
			user.setNickname(nickname);
			String type = cursor.getString(cursor.getColumnIndex("type"));
			System.out.println("++++++++++" + type + "+++++++++");
			user.setType(type);
			String access_token = cursor.getString(cursor
					.getColumnIndex("access_token"));
			user.setAccess_token(access_token);
			String access_key = cursor.getString(cursor
					.getColumnIndex("access_secret"));
			user.setAccess_secret(access_key);
			ByteArrayInputStream stream = new ByteArrayInputStream(
					cursor.getBlob(cursor.getColumnIndex("icon")));
			Drawable icon = Drawable.createFromStream(stream, "img_" + name);
			user.setIcon(icon);
			userlist.add(user);
			cursor.moveToNext();
		}
		cursor.close();
		db.close();
		return userlist;

	}

	public UserInfo findUser(int ids) {//根据数据表中的id查找用户

		UserInfo user = new UserInfo();
		DBHelper dbhelper = new DBHelper(context, DB_NAME);
		SQLiteDatabase db = dbhelper.getReadableDatabase();
		Cursor cursor = db.query("user", null, "id=" + ids, null, null, null,
				null);
		Boolean isFind = cursor.moveToFirst();
		if (isFind) {
			int id = cursor.getInt(cursor.getColumnIndex("id"));
			user.setId(id);
			String name = cursor.getString(cursor.getColumnIndex("name"));
			user.setName(name);
			String userid = cursor.getString(cursor.getColumnIndex("userid"));
			user.setUserid(userid);
			String nickname = cursor.getString(cursor.getColumnIndex("nickname"));
			user.setNickname(nickname);
			String type = cursor.getString(cursor.getColumnIndex("type"));
			user.setType(type);
			String access_token = cursor.getString(cursor
					.getColumnIndex("access_token"));
			user.setAccess_token(access_token);
			String access_key = cursor.getString(cursor
					.getColumnIndex("access_secret"));
			user.setAccess_secret(access_key);
			ByteArrayInputStream stream = new ByteArrayInputStream(
					cursor.getBlob(cursor.getColumnIndex("icon")));
			Drawable icon = Drawable.createFromStream(stream, "img_" + name);
			user.setIcon(icon);
			cursor.close();
			db.close();
			return user;
		} else {
			db.close();
			return null;
		}

	}

	public int deleteUser(int num) {//根据数据表中id删除用户

		DBHelper dbhelper = new DBHelper(context, DB_NAME);
		SQLiteDatabase db = dbhelper.getReadableDatabase();
		int row = db.delete("user", "id=" + num, null);
		db.close();
		return row;

	}
}

 

其中用到了UserInfo类用来表示用户包含用户相应的属性

public class UserInfo implements Serializable {

	private static final long serialVersionUID = 8825186846021795496L;
	private int id;// User表中的ID
	private String name;// 用户姓名
	private String nickname;
	private String userid;//网络中的id
	private Drawable icon;// 用户头像,用二进制字符串存储在数据库中
	private String type;// 用户类型,例如SINA,QQ,RENREN等
	private String access_token;// OAuth认证token
	private String access_secret;// OAuth认证key(secrete)

	public String getUserid() {
		return userid;
	}

	public void setUserid(String userid) {
		this.userid = userid;
	}

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Drawable getIcon() {
		return icon;
	}

	public void setIcon(Drawable icon) {
		this.icon = icon;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getAccess_token() {
		return access_token;
	}

	public void setAccess_token(String access_token) {
		this.access_token = access_token;
	}

	public String getAccess_secret() {
		return access_secret;
	}

	public void setAccess_secret(String access_secret) {
		this.access_secret = access_secret;
	}

	
}

 注:将UserInfo序列化,是为了方便在后面的程序中通过Intent在不同Activity之间传递用户信息

分享到:
评论

相关推荐

    SNS.rar_ sns_SNS_android_社交网络

    《Android社交网络客户端开发详解》 在当今数字化时代,社交网络已经成为了人们日常生活的一部分,而Android作为全球最大的智能手机操作系统,其上的社交网络客户端更是扮演着举足轻重的角色。本项目"sns_SNS_...

    人人都玩开心网:Ext+JS+Android+SSH整合开发Web与移动SNS

    《人人都玩开心网:Ext+JS+Android+SSH整合开发Web与移动SNS》这本书主要聚焦于构建社交网络服务(SNS)平台,通过结合多种技术实现Web端和移动端的应用开发。以下是书中涉及的主要知识点: 1. **EXT.JS**: EXT....

    Android---Douban-SNS.zip_android_android sns

    在Android平台上,开发一款社交网络应用(SNS)如豆瓣网的移动客户端,涉及到许多关键技术和概念。这个项目"Android---Douban-SNS.zip"很可能是为了教学或实践目的,提供了一个完整的讲解和源代码资源,让我们来深入...

    ExtJS+Android+SSH整合开发Web与移动SNS

    本文将围绕“ExtJS+Android+SSH整合开发Web与移动SNS”这一主题展开讨论,旨在为开发者提供一种高效、灵活的开发模式。 #### 二、关键技术解析 ##### 1. ExtJS **简介:** ExtJS是一款基于JavaScript的开源框架,...

    人人都玩开心网•Ext+JS+Android+BSSH整合开发Web与移动SNS源码

    本篇将围绕"人人玩开心网"的源码展开,解析其如何运用Ext JS、Android、BSSH等技术实现Web与移动SNS的整合开发。 1. Ext JS:基于JavaScript的富客户端框架 Ext JS是一个强大的JavaScript库,用于构建功能丰富的...

    人人都玩开心网 ExtJS Android.SSH整合开发Web与移动SNS.(李宁)

    同时,针对移动设备,我们可以利用Android SDK开发出一个客户端应用,这个应用可以直接与服务器端的Web服务进行通信。在这个过程中,开发者需要考虑到Web前端与Android客户端的数据交互,通常通过HTTP请求来完成。 ...

    人人都玩开心网 Ext+JS+Android+SSH整合开发Web与移动SNS源码 1

    对于初学者或者想要深入研究SNS平台开发的开发者来说,这是一个宝贵的资源,可以从中学习到前端交互逻辑、数据请求处理以及如何与后端进行有效通信。 在学习这个源码时,你需要理解每个技术的原理,熟悉它们的API和...

    gyz:完整的手机SNS------OOXX源码(包括服务端+客户端+数据库)

    gyzooxx源码这是一个完整的安卓客户端+J2EE服务端+数据库项目。系统功能基本完善,安卓利用了开心网的界面开发,功能包括:登陆,注册,图片处理上传,图片效果制作截取等完整功能,本地SQLLite数据库存储,附近的人...

    嘀咕客户端android源代码,可学习参考

    今天我们将探讨的是一个名为“嘀咕客户端”的Android源代码,它为我们提供了一个宝贵的参考资料,特别是对于那些希望深入理解Android应用开发,或者想要构建社交网络服务(SNS)应用的开发者来说。 “嘀咕客户端”...

    Android-轻境界采用KotlinSpringBootJavaScript构建的SNS社区

    【Android开发-Kotlin开发】 在Android开发领域,Kotlin已经成为主流的编程语言,以其简洁、安全和富有表现力的语法深受开发者喜爱。本项目“轻境界”充分利用了Kotlin的优势,构建了一个现代化的社交网络服务(SNS...

    SNS驴友系统

    总的来说,"SNS驴友系统"项目涵盖了Android开发的众多关键技术和最佳实践,包括服务器端架构设计、数据库管理、客户端UI设计、网络通信、数据模型、推送通知、地图服务以及性能优化。深入研究这个项目,不仅可以提升...

    大话企业级android开发全集(带二级书签%2C共4.pdf

    - 提供一站式的解决方案,包括Android客户端和服务端开发,服务端可采用JavaEE或LAMP技术栈。 - 为企业提供Android培训服务。 #### 四、关于Android的理解 文档通过问答的形式,深入浅出地介绍了Android的概念和...

    AWS sdk for android

    AWS SDK for Android是亚马逊Web服务(AWS)为Android开发者提供的官方开发工具包,它允许开发者轻松地在Android应用程序中集成AWS服务。这个SDK提供了丰富的库,使得开发者可以访问AWS的各种云服务,包括存储、计算...

    android简历怎么写项目经验范文.pdf

    - 强调项目的创新性和独特性,比如在描述第一个项目时,提到它是一款结合SNS和3G业务的移动应用,注重人生旅行的记录和分享。 2. **功能模块**: - 列出应用的主要功能,如用户注册、登录、拍照上传、信息发布、...

    人人都玩开心网•Ext+JS部分代码

    2. **Web与移动SNS开发**:社交网络服务(SNS)的开发涵盖了Web和移动两个领域,意味着该代码不仅包含传统的Web页面,还有适应不同移动设备(如Android)的应用程序,这需要对响应式设计和跨平台开发有深入理解。...

    开源社区系统--近乎(spacebuilder)v4.1

    v4.0是近乎发展到成熟阶段最重要的一次升级,v4.1进一步贯彻了v4.0规划思路,完善了部分功能和用户体验,更重要是v4.1开始了对手机客户端的支持,Android客户端将与v4.1一起发布(iPhone客户端正在研发之中),此外v...

    陌陌安卓完整源码

    陌陌,作为一款知名的社交网络服务(SNS)应用,其安卓版本的源码具有很高的学习价值,尤其是对于想要深入理解移动应用开发、社交网络功能实现以及XMPP协议的开发者而言。在这里,我们将探讨陌陌安卓完整源码中的...

    记事狗微博系统 4.7.4 Build 20140922 UTF8.zip

    记事狗微博系统采用php mysql开发并开源发布,可承载千万级用户,其支持Wap、3G、Android客户端、iphone客户端、短信、微信等多种方式发布内容,并可选择同步到主流的微博平台(也支持微博帐户登录),内置的插件和...

    AmazingFriends

    7. **用户界面设计**:一个吸引人的用户界面是应用成功的关键。AmazingFriends的界面设计应该直观易用,同时提供足够的反馈以增强用户体验。 8. **通知与推送服务**:为了及时提醒用户收到新消息,应用通常会集成...

    Datingapp

    Java中的JAX-RS规范用于创建RESTful Web服务,使得客户端(如Android或iOS应用)能够通过HTTP协议与后端服务器进行交互。"Datingapp"可能使用JSON作为数据交换格式,提供注册、登录、匹配、消息推送等接口。 4. **...

Global site tag (gtag.js) - Google Analytics