仿新浪微博2014之登陆界面一(sqlite操作)

上一贴介绍了简单的欢迎界面后,我们进入了登陆界面的设计

由于我使用的是新浪微博的第三方授权登陆,所以并不需要账号输入框和密码输入框

登陆界面有一个新浪微博logo(imageview)、用户头像(imageview)、用户账号选择(spinner)、登陆按钮(button)、授权按钮(button)

退出按钮(button)、注销账号按钮(button)

布局文件activity_login.xml 如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".LoginActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical" >
        
     <ImageView
         android:id="@+id/login_logo"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
         android:src="@drawable/login_logo" />
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1.5"
            android:gravity="center"
            android:orientation="vertical" >
            <ImageView
         android:id="@+id/login_header"
         android:layout_width="60dp"
         android:layout_height="60dp"
         
         android:layout_gravity="center_horizontal"
         android:layout_marginTop="10dip"
         android:src="@drawable/login_user_ic" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
            <Spinner 
          android:id="@+id/login_account"
          android:layout_height="wrap_content"
          android:layout_width="fill_parent"
          android:gravity="center"
          android:background="@color/white"
          android:textAlignment="center"
          android:drawSelectorOnTop = "true"
          android:prompt="@string/login_spinner_prompt">
      </Spinner>
        </LinearLayout>
     
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
         android:orientation="vertical" >
            <Button
         android:id="@+id/login_button"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_marginTop="10dip"
         android:background="@drawable/login_button_n"
         android:text="@string/login_button"
         android:textSize="15sp"
         android:textColor="@color/white" />
     </LinearLayout>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="bottom"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/login_auth"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/login_button_other"
                android:layout_weight="1"
                android:text="@string/login_button_auth" />

            <Button
                android:id="@+id/login_exit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/login_button_other"
                android:text="@string/login_button_exit" />

            <Button
                android:id="@+id/login_logout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/login_button_other"
                android:layout_weight="1"
                android:text="@string/login_button_logout" />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

 

效果如下图 


由于我们要存储用户的账号信息,所以需要建立一个数据库,在android 中我们用的是SQLITE数据库,android提供了一个SQLiteOpenHelper类,让我们很轻易的就可以操作sqlite数据库了。我们需要继承SQLiteOpenHelper,我们需要存储用户的ID,用户名,用户头像url,用户授权认证Token,和Expiresin,

代码如下

package com.xhq.xweibo.logic;

import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class XSqliteHelper extends SQLiteOpenHelper
{
	public static final String TB_NAME = "users";

	public XSqliteHelper(Context context, String name, CursorFactory factory,
			int version)
	{
		super(context, name, factory, version);
		// TODO 自动生成的构造函数存根
	}

	@Override
	public void onCreate(SQLiteDatabase db)
	{
		// TODO 自动生成的方法存根
		Log.d("XSqliteHelper", "create");
		String sql;
		sql = "CREATE TABLE IF NOT EXISTS " + TB_NAME + "(" 
				+ UserInfo.ID+ " integer primary key autoincrement," 
				+ UserInfo.USERID+ " varchar," 
				+ UserInfo.TOKEN + " varchar,"
				+ UserInfo.USERNAME+ " varchar," 
				+ UserInfo.USERICON + " varchar,"
				+ UserInfo.USEREXPIRESIN+ " integer" +")";
		Log.d("XSqliteHelper", "sql:" + sql);
		db.execSQL(sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
	{
		// TODO 自动生成的方法存根
		db.execSQL("DROP TABLE IF EXISTS " + TB_NAME);
		onCreate(db);
		Log.e("XSqliteHelper", "update");

	}

	public void updateColumn(SQLiteDatabase db, String oldColumn,
			String newColumn, String typeColumn)
	{
		try
		{
			Log.d("XSqliteHelper", "updatecolum");
			db.execSQL("ALTER TABLE " + TB_NAME + " CHANGE " + oldColumn + " "
					+ newColumn + " " + typeColumn);

		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}

}

我们还要一个用户信息类,代码如下:

package com.xhq.xweibo.logic;

import java.io.Serializable;

import android.graphics.drawable.Drawable;

public class UserInfo implements Serializable
{

	public static final String ID = "_id";
	public static final String USERID = "userId";
	public static final String TOKEN = "token";
	public static final String USERNAME = "userName";
	public static final String USERICON = "userIcon";
	public static final String USEREXPIRESIN = "userexpiresin";

	private String id;
	private String userId;// �û�id
	private String token;
	private String userName;
	private String userIcon;
	private Long userexpiresin;

	public String getId()
	{
		return id;
	}

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

	public String getUserId()
	{
		return userId;
	}

	public void setUserId(String userId)
	{
		this.userId = userId;
	}

	public String getToken()
	{
		return token;
	}

	public void setToken(String token)
	{
		this.token = token;
	}

	public String getUserName()
	{
		return userName;
	}

	public void setUserName(String userName)
	{
		this.userName = userName;
	}

	public String getUserIcon()
	{
		return userIcon;
	}

	public void setUserIcon(String userIcon)
	{
		this.userIcon = userIcon;
	}
	
	public void setUserExpiresin(long ei)
	{
		this.userexpiresin = ei;
	}
	
	public long getUserExpiresin()
	{
		return this.userexpiresin;
	}

}


通过XSqliteHelper我们就可以操作数据库了,我们在写一个类来封装XSqliteHelper的操作

代码如下

package com.xhq.xweibo.logic;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.Log;

public class XDBHelper
{
	public static final String DB_NAME = "xweibo.db";
	public static final int DB_VERSION = 2;
	private SQLiteDatabase db;
	private XSqliteHelper dbHelper;

	public XDBHelper(Context context)
	{
		Log.d("XDBHelper", "construct");
		dbHelper = new XSqliteHelper(context, DB_NAME, null, DB_VERSION);
		db = dbHelper.getWritableDatabase();
	}

	public void Close()
	{
		Log.d("XDBHelper", "close");
		db.close();
		dbHelper.close();
	}

	public List<UserInfo> getUserList(boolean isSimple)
	{
		Log.d("XDBHelper", "getUserList");
		List<UserInfo> userList = new ArrayList<UserInfo>();
		Cursor cursor = db.query(XSqliteHelper.TB_NAME, null, null, null, null,
				null, UserInfo.ID + " DESC");
		cursor.moveToFirst();
		while (!cursor.isAfterLast() && (cursor.getString(1)) != null)
		{
			UserInfo userInfo = new UserInfo();
			userInfo.setId(cursor.getString(0));
			userInfo.setUserId(cursor.getString(1));
			userInfo.setToken(cursor.getString(2));
			userInfo.setUserName(cursor.getString(3));
			userInfo.setUserIcon(cursor.getString(4));
			userInfo.setUserExpiresin(cursor.getLong(5));
			userList.add(userInfo);
			cursor.moveToNext();
		}
		cursor.close();
		return userList;
	}

	public boolean haveUserInfo(String userID)
	{
		Log.d("XDBHelper", "haveuserinfo");
		boolean b = false;
		Cursor cursor = db.query(XSqliteHelper.TB_NAME, null, UserInfo.USERID
				+ "=?", new String[] { userID }, null, null, null);
		b = cursor.moveToFirst();
		cursor.close();
		return b;
	}

	public int UpdateUserInfo(String userName, Bitmap userIcon, String UserId)
	{
		Log.d("XDBHelper", "updateuserinfo");
		ContentValues values = new ContentValues();
		values.put(UserInfo.USERNAME, userName);
		// BLOB����
		final ByteArrayOutputStream os = new ByteArrayOutputStream();
		// ��Bitmapѹ����PNG���룬����Ϊ100%�洢
		userIcon.compress(Bitmap.CompressFormat.PNG, 100, os);
		// ����SQLite��Content��������Ҳ����ʹ��raw
		values.put(UserInfo.USERICON, os.toByteArray());
		int id = db.update(XSqliteHelper.TB_NAME, values, UserInfo.USERID
				+ "=?", new String[] { UserId });
		Log.e("UpdateUserInfo2", id + "");
		return id;
	}

	public int UpdateUserInfo(UserInfo user)
	{
		Log.d("XDBHelper", "updateuserinfo");
		ContentValues values = new ContentValues();
		values.put(UserInfo.USERID, user.getUserId());
		values.put(UserInfo.TOKEN, user.getToken());
		values.put(UserInfo.USEREXPIRESIN, user.getUserExpiresin());
		int id = db.update(XSqliteHelper.TB_NAME, values, UserInfo.USERID + "="
				+ user.getUserId(), null);
		Log.e("UpdateUserInfo", id + "");
		return id;
	}

	// ���users��ļ�¼
	public Long SaveUserInfo(UserInfo user)
	{
		Log.d("XDBHelper", "saveuserinfo");
		ContentValues values = new ContentValues();
		Log.d(DB_NAME, "userid:" + user.getUserId());
		values.put(UserInfo.USERID, user.getUserId());
		values.put(UserInfo.TOKEN, user.getToken());
		values.put(UserInfo.USERNAME, user.getUserName());
		values.put(UserInfo.USERICON, user.getUserIcon());
		values.put(UserInfo.USEREXPIRESIN, user.getUserExpiresin());

		Long uid = db.insert(XSqliteHelper.TB_NAME, UserInfo.ID, values);
		Log.e("SaveUserInfo", uid + "");
		return uid;
	}

	// ���users��ļ�¼
	public Long SaveUserInfo(UserInfo user, byte[] icon)
	{
		Log.d("XDBHelper", "saveuserinfo");
		ContentValues values = new ContentValues();
		values.put(UserInfo.USERID, user.getUserId());
		values.put(UserInfo.USERNAME, user.getUserName());
		values.put(UserInfo.TOKEN, user.getToken());
		values.put(UserInfo.USEREXPIRESIN, user.getUserExpiresin());
		if (icon != null)
		{
			values.put(UserInfo.USERICON, icon);
		}
		Long uid = db.insert(XSqliteHelper.TB_NAME, UserInfo.ID, values);
		Log.e("SaveUserInfo", uid + "");
		return uid;
	}

	// ɾ��users��ļ�¼
	public int DelUserInfo(String UserId)
	{
		Log.d("XDBHelper", "deleteuserinfo");
		int id = db.delete(XSqliteHelper.TB_NAME, UserInfo.USERID + "=?",
				new String[] { UserId });
		Log.e("DelUserInfo", id + "");
		return id;
	}
	public UserInfo getUserByName(String userName,
			List<UserInfo> userList)
	{
		Log.d("XDBHelper", "getuserbyname");
		int size = userList.size();

		for (int i = 0; i < size; i++)
		{
			if (userName.equals(userList.get(i).getUserName()))
			{
				Log.d("XDBHelper", "getuserbyname +size:" + size);
				return userList.get(i);
			}
		}
		return null;

	}

}

这样我们就可以存取和获取用户的信息了


package com.xhq.xweibo.logic;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.Log;

public class XDBHelper
{
	public static final String DB_NAME = "xweibo.db";
	public static final int DB_VERSION = 2;
	private SQLiteDatabase db;
	private XSqliteHelper dbHelper;

	public XDBHelper(Context context)
	{
		Log.d("XDBHelper", "construct");
		dbHelper = new XSqliteHelper(context, DB_NAME, null, DB_VERSION);
		db = dbHelper.getWritableDatabase();
	}

	public void Close()
	{
		Log.d("XDBHelper", "close");
		db.close();
		dbHelper.close();
	}

	public List<UserInfo> getUserList(boolean isSimple)
	{
		Log.d("XDBHelper", "getUserList");
		List<UserInfo> userList = new ArrayList<UserInfo>();
		Cursor cursor = db.query(XSqliteHelper.TB_NAME, null, null, null, null,
				null, UserInfo.ID + " DESC");
		cursor.moveToFirst();
		while (!cursor.isAfterLast() && (cursor.getString(1)) != null)
		{
			UserInfo userInfo = new UserInfo();
			userInfo.setId(cursor.getString(0));
			userInfo.setUserId(cursor.getString(1));
			userInfo.setToken(cursor.getString(2));
			userInfo.setUserName(cursor.getString(3));
			userInfo.setUserIcon(cursor.getString(4));
			userInfo.setUserExpiresin(cursor.getLong(5));
			userList.add(userInfo);
			cursor.moveToNext();
		}
		cursor.close();
		return userList;
	}

	public boolean haveUserInfo(String userID)
	{
		Log.d("XDBHelper", "haveuserinfo");
		boolean b = false;
		Cursor cursor = db.query(XSqliteHelper.TB_NAME, null, UserInfo.USERID
				+ "=?", new String[] { userID }, null, null, null);
		b = cursor.moveToFirst();
		cursor.close();
		return b;
	}

	public int UpdateUserInfo(String userName, Bitmap userIcon, String UserId)
	{
		Log.d("XDBHelper", "updateuserinfo");
		ContentValues values = new ContentValues();
		values.put(UserInfo.USERNAME, userName);
		// BLOB����
		final ByteArrayOutputStream os = new ByteArrayOutputStream();
		// ��Bitmapѹ����PNG���룬����Ϊ100%�洢
		userIcon.compress(Bitmap.CompressFormat.PNG, 100, os);
		// ����SQLite��Content��������Ҳ����ʹ��raw
		values.put(UserInfo.USERICON, os.toByteArray());
		int id = db.update(XSqliteHelper.TB_NAME, values, UserInfo.USERID
				+ "=?", new String[] { UserId });
		Log.e("UpdateUserInfo2", id + "");
		return id;
	}

	public int UpdateUserInfo(UserInfo user)
	{
		Log.d("XDBHelper", "updateuserinfo");
		ContentValues values = new ContentValues();
		values.put(UserInfo.USERID, user.getUserId());
		values.put(UserInfo.TOKEN, user.getToken());
		values.put(UserInfo.USEREXPIRESIN, user.getUserExpiresin());
		int id = db.update(XSqliteHelper.TB_NAME, values, UserInfo.USERID + "="
				+ user.getUserId(), null);
		Log.e("UpdateUserInfo", id + "");
		return id;
	}

	// ���users��ļ�¼
	public Long SaveUserInfo(UserInfo user)
	{
		Log.d("XDBHelper", "saveuserinfo");
		ContentValues values = new ContentValues();
		Log.d(DB_NAME, "userid:" + user.getUserId());
		values.put(UserInfo.USERID, user.getUserId());
		values.put(UserInfo.TOKEN, user.getToken());
		values.put(UserInfo.USERNAME, user.getUserName());
		values.put(UserInfo.USERICON, user.getUserIcon());
		values.put(UserInfo.USEREXPIRESIN, user.getUserExpiresin());

		Long uid = db.insert(XSqliteHelper.TB_NAME, UserInfo.ID, values);
		Log.e("SaveUserInfo", uid + "");
		return uid;
	}

	// ���users��ļ�¼
	public Long SaveUserInfo(UserInfo user, byte[] icon)
	{
		Log.d("XDBHelper", "saveuserinfo");
		ContentValues values = new ContentValues();
		values.put(UserInfo.USERID, user.getUserId());
		values.put(UserInfo.USERNAME, user.getUserName());
		values.put(UserInfo.TOKEN, user.getToken());
		values.put(UserInfo.USEREXPIRESIN, user.getUserExpiresin());
		if (icon != null)
		{
			values.put(UserInfo.USERICON, icon);
		}
		Long uid = db.insert(XSqliteHelper.TB_NAME, UserInfo.ID, values);
		Log.e("SaveUserInfo", uid + "");
		return uid;
	}

	// ɾ��users��ļ�¼
	public int DelUserInfo(String UserId)
	{
		Log.d("XDBHelper", "deleteuserinfo");
		int id = db.delete(XSqliteHelper.TB_NAME, UserInfo.USERID + "=?",
				new String[] { UserId });
		Log.e("DelUserInfo", id + "");
		return id;
	}

	public void delAllUserInfo()
	{
		dbHelper.dropTable(db);
	}

	public void createUserTable()
	{
		dbHelper.createTable(db);
	}

	public UserInfo getUserByName(String userName,
			List<UserInfo> userList)
	{
		Log.d("XDBHelper", "getuserbyname");
		int size = userList.size();

		for (int i = 0; i < size; i++)
		{
			if (userName.equals(userList.get(i).getUserName()))
			{
				Log.d("XDBHelper", "getuserbyname +size:" + size);
				return userList.get(i);
			}
		}
		return null;

	}

}


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值