Android 中SQLite技术实例详解

Android和iOS的数据库都是用SQLite来实现.

一,SQLite数据库简介:

轻量级:SQLite数据库是一个轻量级的数据库,适用于少量数据的CURD;

文件本质:SQLite数据库支持大部分SQL语法,允许使用SQL语句操作数据库,其本质是一个文件,不需要安装启动。

数据读写:SQLite数据库打开只是一个文件的读写流。

二.简单的数据库语句知识

在android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持NULL,INTEGER,REAL(浮点数字),TEXT(字符串文本)和BLOB(二进制对象)数据类型,实际上sqlite3也接受varchar(n),char(n),decimal(p,s)等数据类型,只不过在运算或保存时会转成对应的五种数据类型.

SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。

今天我就用一个简单的列子来说明来实现SQLite。

实例代码:

import java.util.ArrayList;
import java.util.Iterator;

import com.hucc.huccgps.R;

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

private static final String TAG = "JGPS/MainActivity";
private TextView mAdd_white = null;
private ListView mWhiteListView = null;
private Context mContext = null;

private int mPosition;
private DBHelper mDBHelper = null;
private WhiteListAdapter mAdapter = null;
private ArrayList<Item> mWhiteListItem = new ArrayList<Item>();

@Override
protected void onCreate(Bundle savedInstanceState) {
  Log.d("JGPS/Start", "onCreate");
  super.onCreate(savedInstanceState);
  setContentView(R.layout.relative_main);
  this.mDBHelper = new DBHelper(this);
  this.mContext = this;
  this.mWhiteListItem = new ArrayList<Item>();
  this.mWhiteListView = (ListView)findViewById(R.id.list_view);
  initData();
  this.mWhiteListView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> paramAdapterView, View paramView,
        int paramInt, long paramLong) {
      Log.d("JGPS/MainActivity", ""+paramInt);
      MainActivity.this.updateWhiteList((Item)MainActivity.this.mWhiteListItem.get(paramInt));
    }
  });
  if (this.mAdd_white == null)
    return;

  mAdd_white.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
      MainActivity.this.addContactList();
    }
  });

  Log.d("JGPS/end", "onCreate");
}

private void initData() {
  this.mWhiteListItem = this.mDBHelper.getRelativesList();
  if (this.mWhiteListItem.size() != 3) {
    for (int i = 1; i < 4; i++) {
      Log.d("JGPS/MainActivity", "initData,id=" + i);
      Item localItem1 = new Item();
      localItem1.setName("");
      localItem1.setNumber("");
      addItemToList(localItem1);
      updateSetting(i,"");
    }
    this.mWhiteListItem = this.mDBHelper.getRelativesList();
  }
  Iterator localIterator = this.mWhiteListItem.iterator();
  while (localIterator.hasNext()) {
    Item localItem2 = (Item) localIterator.next();
    Log.d("JGPS/MainActivity", "initData,id=" + localItem2.getId() + ",name = " + localItem2.getName() + ",number=" + localItem2.getNumber());
  }
  this.mAdapter = new WhiteListAdapter(this, this.mWhiteListItem);
  this.mWhiteListView.setAdapter(mAdapter);
}

private void updateSetting(int id, String phoneNum) {
  switch (id) {
  case 1:
    putSting("phone_num1",phoneNum);
    break;
  case 2:
    putSting("phone_num2",phoneNum);
    break;
  case 3:
    putSting("phone_num3",phoneNum);
    break;
  default:
    Log.d("JGPS/MainActivity", "Wrong relative number id");
  }
}

private void putSting(String paramString1, String paramString2) {
  SharedPreferences.Editor localEditor = getSharedPreferences("sos_config", 0).edit();
  localEditor.putString(paramString1, paramString2);
  localEditor.apply();
}

protected void updateWhiteList(Item paramItem) {
  final Item item = paramItem;
  Log.d("JGPS/MainActivity", "updateWhiteList------" + item.getId());
  final Dialog localDialog = new Dialog(this, R.style.dialog);
  localDialog.show();
  Window localWindow = localDialog.getWindow();
  localWindow.setContentView(R.layout.dialog_editor);
  Button localButton1 = (Button) localWindow.findViewById(R.id.btn_ok);
  Button localButton2 = (Button) localWindow.findViewById(R.id.btn_cancel);
  final EditText phone = (EditText)localWindow.findViewById(R.id.phone);
  final EditText name = (EditText)localWindow.findViewById(R.id.name);
  name.setText(item.getName());
  phone.setText(item.getNumber());
  ((TextView)localWindow.findViewById(R.id.title)).setText(R.string.edit_white);
  localButton1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View paramView) {
      if (phone.getText().toString().trim().length() == 0) {
        Toast.makeText(mContext, R.string.toast_tel, 2000).show();
        return;
      }
      if (name.getText().toString().trim().length() == 0) {
        Toast.makeText(mContext, R.string.name_null, 2000).show();
        return;
      }
      MainActivity.this.updateContactInDB(item.getId(), name.getText().toString(), phone.getText().toString());
      int id = Integer.parseInt(item.getId());
      updateSetting(id, phone.getText().toString());
      Toast.makeText(mContext, R.string.edit_success, 2000).show();
      localDialog.cancel();
    }
  });
  localButton2.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View paramView) {
      localDialog.cancel();
    }
  });
}

protected void updateContactInDB(String paramString1, String paramString2, String paramString3) {
  Item localItem = new Item();
  localItem.setId(paramString1);
  localItem.setName(paramString2);
  localItem.setNumber(paramString3);
  updateItemList(localItem);
}

private void updateItemList(Item paramItem) {
  Item localItem2;
  Iterator localIterator1 = this.mWhiteListItem.iterator();
  while (localIterator1.hasNext()) {
    localItem2 = (Item) localIterator1.next();
    if (localItem2.getId().equals(paramItem.getId())) {
      localItem2.setName(paramItem.getName());
      localItem2.setNumber(paramItem.getNumber());
      this.mDBHelper.updateRelativesItem(paramItem);
    }
  }

  Log.d("JGPS/MainActivity", "updateItemInList ---------");
  this.mAdapter = new WhiteListAdapter(this, this.mWhiteListItem);
  this.mWhiteListView.setAdapter(mAdapter);
}

private void addContactList() {
  final Dialog dialog = new Dialog(this, R.style.dialog);
  dialog.show();
  Window window = dialog.getWindow();
  window.setContentView(R.layout.dialog_editor);

  Button btn1 = (Button)window.findViewById(R.id.btn_ok);
  Button btn2 = (Button)window.findViewById(R.id.btn_cancel);
  final EditText phone = (EditText)window.findViewById(R.id.phone);
  final EditText name = (EditText)window.findViewById(R.id.name);
  btn1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
      if (phone.getText().toString().trim().length() == 0)
      {

       Toast.makeText(mContext, R.string.toast_tel, 2000).show();
       return;
      }
      if (name.getText().toString().trim().length() == 0)
      {
       Toast.makeText(mContext, R.string.name_null, 2000).show();
       return;
      }
      if (MainActivity.this.mWhiteListItem.size()>3) {
        String str = MainActivity.this.getResources().getString(R.string.full1)+ " " + 3 + " " + MainActivity.this.getResources().getString(R.string.full2);
        Toast.makeText(mContext, str, 2000).show();
        dialog.cancel();
        return;
      }
      MainActivity.this.addContactToDB(name.getText().toString(),phone.getText().toString());
      dialog.cancel();
    }
  });
  btn2.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
      dialog.cancel();
    }
  });
}

protected void deleteContactFromDB(String paramString) {
  updateContactInDB(paramString, "", "");
  Log.d("JGPS/MainActivity", "===addItemToList = "+paramString);
  int id = Integer.parseInt(paramString);
  updateSetting(id, paramString);
  Toast.makeText(this.mContext, R.string.delete_success, 2000).show();
}

@Override
protected void onStart() {
  Log.d("JGPS/MainActivity", "onStart()");
  super.onStart();
}

protected void startContactIntent(int paramInt) {
  Log.d("JGPS/MainActivity", "onClick " + paramInt);
  this.mPosition = paramInt;
  Intent localIntent = new Intent("android.intent.action.PICK");
  localIntent.setType("vnd.android.cursor.dir/phone_v2");
  startActivityForResult(localIntent, 100);
}

protected void addContactToDB(String paramString1, String paramString2) {
  Iterator localIterator = this.mWhiteListItem.iterator();

  while (localIterator.hasNext()) {
    if(((Item)localIterator.next()).getNumber().equals(paramString2)){
       Toast.makeText(mContext, R.string.replace, 2000).show();
       return;
     }
  }
  Item localItem = new Item();
  localItem.setName(paramString1);
  localItem.setNumber(paramString2);
  addItemToList(localItem);
  Toast.makeText(mContext, R.string.replace, 2000).show();
}

private void addItemToList(Item localItem) {
  Log.d("JGPS/MainActivity", "addItemToList,name = " + localItem.getName() + ",number=" + localItem.getNumber());
  this.mDBHelper.addRelativesItem(localItem);
  this.mWhiteListItem = this.mDBHelper.getRelativesList();
  this.mAdapter = new WhiteListAdapter(this, this.mWhiteListItem);
  this.mWhiteListView.setAdapter(mAdapter);
}

public void startActivityForResult(Intent paramIntent, int paramInt)
{
 super.startActivityForResult(paramIntent, paramInt);
}

private class WhiteListAdapter extends BaseAdapter{

  private Context context;
  private LayoutInflater mInflater;
  private ArrayList<Item> listItem;

  public WhiteListAdapter(Context context1,
      ArrayList<Item> whiteListItem) {
    this.context = context1;
    this.listItem = whiteListItem;
    this.mInflater = LayoutInflater.from(context);
  }

  public int getCount()
  {
    if ((this.listItem !=null) && (this.listItem.size() > 0)) {
      return 3;
    }
   return 0;
  }

  public Object getItem(int paramInt)
  {
   if ((this.listItem != null) && (this.listItem.size() > 0))
    return this.listItem.get(paramInt);
   return null;
  }

  public long getItemId(int paramInt)
  {
   return 0L;
  }

  @Override
  public View getView(int paramInt, View paramView, ViewGroup paramViewGroup) {
    Log.d("JGPS/MainActivity", "getView,position=" + paramInt + ",name=" + ((Item)this.listItem.get(paramInt)).getName() + ",num=" + ((Item)this.listItem.get(paramInt)).getNumber());
    if (paramView == null) {
      final ViewHolder localViewHolder = new ViewHolder();
      paramView = this.mInflater.inflate(R.layout.relative_list_item, null);
      localViewHolder.ivCall = (ImageView)paramView.findViewById(R.id.imageView_call);
      localViewHolder.ivDelete = (ImageView)paramView.findViewById(R.id.imageView_delete);
      localViewHolder.ivSelect = (ImageView)paramView.findViewById(R.id.recipients_picker);
      localViewHolder.txtView_name = (TextView)paramView.findViewById(R.id.txtView_name);
      localViewHolder.txtView_tel = (TextView)paramView.findViewById(R.id.txtView_number);

      paramView.setTag(localViewHolder);
      localViewHolder.position = paramInt;
      localViewHolder.ivSelect.setTag(localViewHolder);

      if ((this.listItem.get(paramInt)== null)||
          (((Item)this.listItem.get(paramInt)).getNumber() == null)
          || (((Item)this.listItem.get(paramInt)).getNumber().equals(""))) {
        localViewHolder.ivCall.setVisibility(View.GONE);
        localViewHolder.ivSelect.setVisibility(View.VISIBLE);
        String str1 = MainActivity.this.getString(R.string.family_string);
        String str2 = str1 + (paramInt + 1) + ":";
        localViewHolder.txtView_name.setText(str2);
        localViewHolder.txtView_tel.setText(R.string.click_to_add);
      }else {
        localViewHolder.ivCall.setVisibility(View.VISIBLE);
        localViewHolder.ivSelect.setVisibility(View.GONE);
        localViewHolder.txtView_name.setText(((Item)this.listItem.get(paramInt)).getName());
        localViewHolder.txtView_tel.setText(((Item)this.listItem.get(paramInt)).getNumber());
      }

      localViewHolder.ivSelect.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View paramView) {
          MainActivity.WhiteListAdapter.ViewHolder localViewHolder = (MainActivity.WhiteListAdapter.ViewHolder)paramView.getTag();
          Log.d("JGPS/MainActivity", "getView,mPosition=" + MainActivity.this.mPosition);

          MainActivity.this.startContactIntent(localViewHolder.position);
        }
      });

      if ((!(((Item)this.listItem.get(paramInt)).getName().equals("")))
          || (!(((Item)this.listItem.get(paramInt)).getNumber().equals(""))))
      {
        localViewHolder.ivDelete.setVisibility(View.VISIBLE);
      }else {
      localViewHolder.ivDelete.setVisibility(View.GONE);
      }

      localViewHolder.ivCall.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View paramView) {
          Intent localIntent = new Intent("android.intent.action.CALL",
              Uri.parse("tel:" + ((Item)MainActivity.WhiteListAdapter.this.listItem.get(localViewHolder.position)).getNumber()));
          MainActivity.WhiteListAdapter.this.context.startActivity(localIntent);
        }
      });

      localViewHolder.ivDelete.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View paramView) {
         if(paramView.getId() != R.id.imageView_delete)
            return;
         final String str = ((Item)MainActivity.WhiteListAdapter.this.listItem.get(localViewHolder.position)).getId();
         Log.d("JGPS/MainActivity", "delete item onClick,strId=" + str + ",position=" + localViewHolder.position);

         final Dialog localDialog = new Dialog(MainActivity.WhiteListAdapter.this.context, R.style.dialog);
         localDialog.show();
         Window localWindow = localDialog.getWindow();
         localWindow.setContentView(R.layout.dialog_delete);
         ((TextView)localWindow.findViewById(R.id.txtView_delete)).setText(MainActivity.WhiteListAdapter.this.context.getResources().getString(R.string.delete_one)
             + "'" + ((Item)MainActivity.WhiteListAdapter.this.listItem.get(localViewHolder.position)).getName()
             + "'" + MainActivity.WhiteListAdapter.this.context.getResources().getString(R.string.delete_two));
         Button localButton1 = (Button) localWindow.findViewById(R.id.btn_ok);
         Button localButton2 = (Button) localWindow.findViewById(R.id.btn_cancel);
         localButton1.setOnClickListener(new OnClickListener() {

          @Override
          public void onClick(View paramView) {
            MainActivity.this.deleteContactFromDB(str);
            localDialog.cancel();
          }
        });
         localButton2.setOnClickListener(new OnClickListener() {

          @Override
          public void onClick(View paramView) {
            localDialog.cancel();
          }
        });
        }
      });

    }else {

    }

    return paramView;
  }

  public class ViewHolder{
    public ImageView ivCall;
     public ImageView ivDelete;
     public ImageView ivSelect;
     public int position;
     public TextView txtView_name;
     public TextView txtView_tel;
  }
}
}

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper extends SQLiteOpenHelper {

public static final String TABLE_RELATIVES_CONTENT = "RelativesContent";
public static final int VERSION = 1; //版本
public static final String dbName = "SosDB"; //数据库的名字
public static Context mContext = null;
public SQLiteDatabase db = null;

public DBHelper(Context paramContext) {
  super(paramContext, "SosDB", null, 1);
  mContext = paramContext;
}

// 创建数据库表
@Override
public void onCreate(SQLiteDatabase paramSQLiteDatabase) {
  paramSQLiteDatabase.execSQL("create table RelativesContent(id integer primary key autoincrement,name text , number text)");
  closeDatabase();
}

private void closeDatabase() {
  if (this.db == null)
    return;
  this.db.close();
}

@Override
public void onUpgrade(SQLiteDatabase paramSQLiteDatabase, int paramInt1, int paramInt2) {
  onCreate(paramSQLiteDatabase);
}

//查询方法
public ArrayList<Item> getRelativesList() {
  String idf = null;
  String namef = null;
  String numf = null;
  ArrayList localArrayList = new ArrayList();
  openDatabase();
  Cursor localCursor = this.db.query("RelativesContent", null, null, null, null, null, null);
  if(localCursor == null)
    return localArrayList;
  while (localCursor.moveToNext()) {
    Item localItem = new Item();
    idf = localCursor.getString(localCursor.getColumnIndex("id"));
    namef = localCursor.getString(localCursor.getColumnIndex("name"));
    numf = localCursor.getString(localCursor.getColumnIndex("number"));
    localItem.setId(idf);
    Log.d("JGPS/MainActivity", "dbid=" + idf);
    if ((namef == null) || ("".equals(namef))) {
      localItem.setName("");
    }else {
      localItem.setName(namef);
    }
    if ((numf == null) || ("".equals(numf))) {
      localItem.setNumber("");
    }else {
      localItem.setNumber(numf);
    }
    localArrayList.add(localItem);
  }
  return localArrayList;
}

//写入数据
private void openDatabase() {
  this.db = super.getWritableDatabase();
}

//添加数据
public boolean addRelativesItem(Item localItem) {
  openDatabase();
  ContentValues localContentValues = new ContentValues();
  localContentValues.put("name", localItem.getName());
  localContentValues.put("number", localItem.getNumber());
  long l = this.db.insert("RelativesContent", null, localContentValues);
  closeDatabase();
  return (1<=0L);
}

//更新数据
public boolean updateRelativesItem(Item paramItem) {
  openDatabase();
  ContentValues localContentValues = new ContentValues();
  localContentValues.put("name", paramItem.getName());
  localContentValues.put("number", paramItem.getNumber());
  SQLiteDatabase localSQLiteDatabase = this.db;
  String[] arrayOfString = new String[1];
  arrayOfString[0] = paramItem.getId();
  long l = localSQLiteDatabase.update("RelativesContent", localContentValues, "id=?", arrayOfString);
  closeDatabase();
  return (1 <= 0L);
}

}

import java.io.Serializable;

public class Item implements Serializable{

private String _id;
private String name;
private String number;

public Item() {
  // TODO Auto-generated constructor stub
}

public void Item(String paramString1, String paramString2, String paramString3)
 {
  this._id = paramString1;
  this.name = paramString2;
  this.number = paramString3;
 }

public String getId() {
  return _id;
}

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

public String getName() {
  return name;
}

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

public String getNumber() {
  return number;
}

public void setNumber(String paramString)
 {
  this.number = paramString;
 }
 }

这是基本的数据程序。

XML

relative_main

<LinearLayout android:orientation="vertical"
android:background="@color/background_color"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout android:background="@drawable/title_bar"
  android:layout_width="fill_parent"
  android:layout_height="50.0sp">
  <TextView
    android:textSize="@dimen/title_size"
    android:textStyle="bold"
    android:textColor="@color/title_color"
    android:gravity="center"
    android:layout_gravity="center"
    android:layout_width="wrap_content"
    android:layout_height="50.0sp"
    android:text="@string/relative_name"
    android:layout_centerInParent="true" />
</RelativeLayout>
<RelativeLayout android:id="@+id/white_content"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  <ListView android:id="@+id/list_view"
     android:scrollbars="none"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:scrollingCache="true"
     android:cacheColorHint="#00000000"
     android:divider="@null"
     android:fastScrollEnabled="false" />
</RelativeLayout>
</LinearLayout>
dialog_editor

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center"
android:orientation="vertical"
android:id="@+id/linearlayout_dialog"
android:layout_width="300.0dip"
android:layout_height="wrap_content">
   <TextView
  android:textSize="20.0sp"
  android:textColor="#ffffffff"
  android:gravity="center"
  android:id="@+id/title"
  android:background="@drawable/popup_topbg"
  android:layout_width="fill_parent"
  android:layout_height="60.0dip"
  android:text="@string/add_white" />
<LinearLayout
  android:orientation="vertical"
  android:background="@drawable/simple_dialog_list_item_bg"
  android:paddingLeft="5.0dip" android:paddingTop="5.0dip"
  android:paddingRight="5.0dip" android:layout_width="fill_parent"
  android:layout_height="wrap_content">

      <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:layout_marginLeft="8.0dip"
    android:layout_marginTop="6.0dip" android:layout_marginRight="6.0dip"
    android:layout_marginBottom="2.0dip">
    <TextView android:textSize="16.0sp" android:textColor="#ff000000"
      android:layout_width="wrap_content" android:layout_height="wrap_content"
      android:text="@string/name" />
    <EditText android:gravity="left|center"
      android:id="@+id/name"
      android:background="@drawable/text_input"
      android:layout_width="210.0dip" android:layout_height="wrap_content"
      android:layout_marginLeft="8.0dip" android:hint="@string/name_hint"
      android:singleLine="true" />
  </LinearLayout>
  <LinearLayout android:layout_gravity="center" android:orientation="horizontal"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_marginLeft="8.0dip" android:layout_marginRight="6.0dip">
    <TextView android:textSize="16.0sp" android:textColor="#ff000000"
      android:layout_width="wrap_content" android:layout_height="wrap_content"
      android:text="@string/address" />
    <EditText android:gravity="left|center" android:id="@+id/phone"
      android:background="@drawable/text_input"
      android:layout_width="210.0dip"
      android:layout_height="wrap_content" android:layout_marginLeft="8.0dip"
      android:hint="@string/address_hint" android:singleLine="true"
      android:inputType="phone" />
  </LinearLayout>

  <include layout="@layout/divider" />
  <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent"
    android:layout_height="54.0dip">
    <Button android:textSize="20.0sp" android:id="@+id/btn_ok"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" android:text="@string/ok"
      android:layout_weight="5.0" style="@style/dialog_item" />
    <View android:background="#ffbcc2c5" android:layout_width="2.0px"
      android:layout_height="fill_parent" />
    <Button android:textSize="20.0sp" android:id="@+id/btn_cancel"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:text="@string/cancel" android:layout_weight="5.0"
      style="@style/dialog_item" />
  </LinearLayout>
</LinearLayout>
 </LinearLayout>

relative_list_item

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center_vertical"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="40.0dip"
style="@style/list_item_background">
<LinearLayout
  android:gravity="center_vertical"
  android:orientation="horizontal"
  android:id="@+id/ll_line1"
  android:paddingLeft="5.0dip"
  android:paddingRight="5.0dip"
  android:layout_width="0.0dip"
  android:layout_height="wrap_content"
  android:layout_weight="1.0">
  <TextView
    android:textSize="@dimen/list_font_size_0"
    android:textStyle="bold"
    android:textColor="@color/list_item_text"
    android:ellipsize="end"
    android:gravity="center"
    android:id="@+id/txtView_name"
    android:paddingBottom="3.0dip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxWidth="80.0dip"
    android:singleLine="true" />
  <TextView
    android:textSize="@dimen/list_font_size_1"
    android:textStyle="bold"
    android:textColor="@color/list_item_text"
    android:ellipsize="end" android:gravity="center"
    android:id="@+id/txtView_number" android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:layout_marginLeft="10.0dip"
    android:singleLine="true" />
</LinearLayout>
<ImageView
  android:layout_gravity="center_vertical"
  android:id="@+id/imageView_call"
  android:background="@drawable/btn_dial_action"
  android:paddingLeft="8.0dip"
  android:paddingTop="8.0dip"
  android:paddingRight="8.0dip"
  android:paddingBottom="8.0dip"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:src="@drawable/call_phone" />"

 <ImageView android:layout_gravity="center_vertical"
android:id="@+id/recipients_picker"
android:background="@drawable/add_contact_selector"
android:layout_width="65.0dip" android:layout_height="65.0dip"
android:layout_marginLeft="2.0dip" android:layout_marginRight="2.0dip"
android:scaleType="fitXY" />
<View android:id="@+id/imageView_divider" android:background="#2b2b2b2b"
  android:layout_width="2.0dip" android:layout_height="40.0dip" />
<ImageView android:layout_gravity="right|center"
  android:id="@+id/imageView_delete" android:paddingLeft="8.0dip"
  android:paddingTop="8.0dip" android:paddingRight="8.0dip"
  android:paddingBottom="8.0dip" android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:src="@drawable/del_cross" />
    </LinearLayout>

dialog_delete

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center"
android:orientation="vertical"
android:id="@+id/linearLayout_dialog"
android:layout_width="300.0dip" android:layout_height="wrap_content">
<TextView android:textSize="20.0sp" android:textColor="#ffffffff"
  android:gravity="center" android:background="@drawable/popup_topbg"
  android:layout_width="fill_parent" android:layout_height="60.0dip"
  android:text="@string/tips" />
<LinearLayout android:orientation="vertical"
  android:background="@drawable/simple_dialog_list_item_bg"
  android:paddingLeft="5.0dip"
  android:paddingTop="12.0dip" android:paddingRight="5.0dip"
  android:layout_width="fill_parent" android:layout_height="wrap_content">
  <TextView android:textSize="20.0sp" android:textColor="#ff000000"
    android:id="@+id/txtView_delete" android:paddingBottom="12.0dip"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:layout_marginLeft="8.0dip" android:layout_marginRight="6.0dip" />
  <include layout="@layout/divider" />
  <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent"
    android:layout_height="54.0dip">
    <Button android:textSize="20.0sp" android:id="@+id/btn_ok"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:text="@string/dialog_yes" android:layout_weight="5.0"
      style="@style/dialog_item" />
    <View android:background="#ffbcc2c5" android:layout_width="2.0px"
      android:layout_height="fill_parent" />
    <Button android:textSize="20.0sp" android:id="@+id/btn_cancel"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:text="@string/dialog_no" android:layout_weight="5.0"
      style="@style/dialog_item" />
  </LinearLayout>
</LinearLayout>
</LinearLayout>

这是一个简单的demo,我这里就不详细说明数据库的细节了,对于已经很熟悉数据库的,可以查看android官网有说明的,

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android开发中使用sqlite实现新闻收藏和取消收藏的功能

    之前学习oracle,简单的认为数据库只存在服务器端,学习安卓之后才发现原来android和Ios本身是"携带"数据库的--SQLite,是轻量级的.嵌入式的.关系型数据库,是Android.IOS等广泛使用的的数据库系统.用于存储本地的一直状态.刚写出来一个实现新闻收藏的功能,写出来供大家参考. 在Android中我们通过SQLiteDatabase这个类的对象操作SQLite数据库.由于SQLite数据库并不需要像C/S数据库那样建立连接以及身份验证的特性,以及SQLite数据库单

  • Android数据持久化之SQLite数据库用法分析

    本文实例讲述了Android数据持久化之SQLite数据库用法.分享给大家供大家参考,具体如下: 这一节我将总结一下android中的另一种数据存储--SQLite 的相关知识点 SQLite数据库是android系统自带的,主要用到的类包括SQLiteOpenHelper和SQLiteDatabase. 1.SQLiteOpenHelper:创建数据库和数据库版本管理的辅助类,该类是一个抽象类,所以我们一般都有一个子类SQLiteOpenHelper,需要继承实现的方法主要有onCreate(

  • 详解Android数据存储—使用SQLite数据库

    SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库.Android提供了3种操作数据的方式,SharedPreference(共享首选项).文件存储以及SQLite数据库. SQLite数据库文件被保存在/data/data/package_name/databases目录下. 一.创建和删除表 1.创建表 创建表的SQL语句为: CREATE TABLE userInfo_brief ( id INTEGER PRIMARY KEY AUTOINCREMENT, na

  • Android SQLite数据库基本操作方法

    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能.而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库.那么就来看一下在Android程序中怎么去操作SQLite数据库来实现一些需求的吧,仍然以一个小例子开始: 在创建Android项目之前,我们应该想一下我们要定义的数据库的相关信息和里面的表格的相关信息,为了日后数据库的更新更加方便 ,我们可以用一个专门的类保存数据库的相关信息,以后如果要更新数据库的话只需要该动这个类

  • Android实现SQLite添加、更新及删除行的方法

    本文实例讲述了Android实现SQLite添加.更新及删除行的方法.分享给大家供大家参考,具体如下: SQLiteDatabase类暴露了特定的方法,如insert.delete和update等方法,这些方法包装了执行这些动作所需的SQL语句.尽管如此,execSQL方法允许你在数据库表上执行任何有效的SQL语句,而这些动作就是你想要手动执行的. 在任何时候,如果你修改了底层数据库的值,你都应该调用任一在当前表上浏览的Cursor的refreshQuery方法. 插入新行 为了创建一个新行,构

  • Android利用listview控件操作SQLite数据库实例

    在本实例中,首先我们利用SQLiteOpenHelper类建立一个数据库,并写好增.删.查等方法,通过SimpleCursorAdapter连接listview实现数据库的增加.查询以及长按删除的功能. 首先,我们先认识一下什么是SQLiteOpenHelper类. Android为了操作SQlite数据库,提供了SQLiteDatabase类,其内封装了insert .delete.update .query .执行SQL命令等操作.同时又为SQLiteDatabase提供了一个辅助类,SQL

  • Android 中SQLite技术实例详解

    Android和iOS的数据库都是用SQLite来实现. 一,SQLite数据库简介: 轻量级:SQLite数据库是一个轻量级的数据库,适用于少量数据的CURD; 文件本质:SQLite数据库支持大部分SQL语法,允许使用SQL语句操作数据库,其本质是一个文件,不需要安装启动. 数据读写:SQLite数据库打开只是一个文件的读写流. 二.简单的数据库语句知识 在android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持NULL,INTEGER,REAL(浮点数字),TE

  • Android中SQLite 使用方法详解

    Android中SQLite 使用方法详解 现在的主流移动设备像android.iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧.对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取. 下面就向大家介绍一下SQLite常用的操作方法,为了方便,我将代码写在了Activity的onCreate中: @Ov

  • Android 中ContentProvider的实例详解

    Android 中ContentProvider的实例详解 Content Provider 的简单介绍: * Android中的Content Provider 机制可支持在多个应用中存储和读取数据.这也是跨应用 共享数据的唯一方式.在Android系统中,没有一个公共的内存区域,供多个应用共享存储数据: * Android 提供了一些主要数据类型的ContentProvider ,比如:音频.视频.图片和私人通讯录等: 在android.provider 包下面找到一些android提供的C

  • Android 中 ActivityLifecycleCallbacks的实例详解

    Android 中 ActivityLifecycleCallbacks的实例详解           以上就是使用ActivityLifecycleCallbacks的实例,代码注释写的很清楚大家可以参考下, MyApplication如下: package com.cc; import java.util.LinkedList; import android.app.Activity; import android.app.Application; import android.os.Bun

  • Java中的instanceof关键字在Android中的用法实例详解

    在下面介绍Android中如何使用instanceof关键字开发更方便时,先来温习一下java中instanceof的概念. instanceof大部分的概念是这样定义的:instanceof是Java的一个二元操作符,和==,>,<是同一类东西.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据.举个栗子: String s = "I AM an Object!"; boolean isObj

  • Android中ShapeableImageView使用实例详解(告别shape、三方库)

    目录 效果 前言 使用 引入material包 常规 圆角 圆 描边 切角 菱形 叶子 半圆 六边形 属性 扩展 shapeAppearance ShapeAppearanceModel MaterialShapeDrawable 说明 描边问题 默认圆角问题 Github 感谢 最后 效果 前言 先来看一下ShapeableImageView是什么 由上图可以看到ShapeableImageView也没有什么神秘的,不过是ImageView的一个子类而已,但是从效果图来看,在不写shape.不

  • android双缓冲技术实例详解

    Android中的SurfaceView类就是双缓冲机制.因此,在进行Android游戏开发时应尽量使用SurfaceView而不要使用View,这样的话效率较高,并且SurfaceView的功能也更加完善.为了更容易的了解双缓冲技术,下面介绍用View实现双缓冲的方法. 在此需要说明一下,双缓冲的核心技术就是先通过setBitmap方法将要绘制的所有的图形绘制到一个Bitmap上,然后再来调用drawBitmap方法绘制出这个Bitmap,显示在屏幕上.其具体的实现代码如下: 先贴出View类

  • Android 帧动画的实例详解

    Android 帧动画的实例详解 对于 Android 帧动画 大体上可以理解成 一张张图片 按一定顺序切换, 这样当连续几张图是一组动画时,就可以连起来了看成是一个小电影,你懂得 好得,比就装到这里,下面开始进入正题,由于产品需求 需要做一个 声音喇叭动态切换的样式,我特么第一就想到是帧动画切换,然后就百度了一些资料,发现 真的, 现在这个网上太多的资料是 copy粘贴过来的, 一错全错,对于这种情况我只想说,made,一群垃圾, 所以今天我将带你们走进Android 正确帧动画地址. 第一步

  • Android的搜索框架实例详解

    基础知识 Android的搜索框架将代您管理的搜索对话框,您不需要自己去开发一个搜索框,不需要担心要把搜索框放什么位置,也不需要担心搜索框影响您当前的界面.所有的这些工作都由SearchManager类来为您处理(以下简称"搜索管理器"),它管理的Android搜索对话框的整个生命周期,并执行您的应用程序将发送的搜索请求,返回相应的搜索关键字. 当用户执行一个搜索,搜索管理器将使用一个专门的Intent把搜索查询的关键字传给您在配置文件中配置的处理搜索结果的Activity.从本质上讲

  • Android中ContentProvider和ContentResolver详解

    Android中ContentProvider和ContentResolver详解 在Android中,我们的应用有的时候需要对外提供数据接口,可以有如下几种方法: 1)AIDL 2)Broadcast 3)ContentProvider. 使用AIDL需要我们编写AIDL接口以及实现,而且对方也要有相应的接口描述,有点麻烦:使用Broadcast,我们不需要任何接口描述,只要协议文档就可以了,但是有点不好就是,这种方式不直接而且是异步的:使用ContentProvider我们不需要接口描述,只

随机推荐