码迷,mamicode.com
首页 > 移动开发 > 详细

Android · SQLite

时间:2014-12-17 16:12:54      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   ar   io   color   os   sp   

 

package com.manhua.sqlitetest;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements
        AdapterView.OnItemClickListener {
    private DatabaseHelper mDB;
    private Cursor mCursor;
    private EditText edit_Name;
    private EditText edit_Info;
    private ListView lv;
    private ListAdapter adapter = null;

    private int ID = 0;
    protected final static int MENU_ADD = Menu.FIRST;
    protected final static int MENU_DELETE = Menu.FIRST + 1;
    protected final static int MENU_UPDATE = Menu.FIRST + 2;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mDB = new DatabaseHelper(this);
        mCursor = mDB.select();

        edit_Name = (EditText) findViewById(R.id.editText1);
        edit_Info = (EditText) findViewById(R.id.editText2);
        lv = (ListView) findViewById(R.id.listView1);

        adapter = new ListAdapter(this, mCursor);
        lv.setAdapter(adapter);
        lv.setOnItemClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        menu.add(Menu.NONE, MENU_ADD, 0, "ADD");
        menu.add(Menu.NONE, MENU_DELETE, 0, "DELETE");
        menu.add(Menu.NONE, MENU_UPDATE, 0, "UPDATE");
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch (item.getItemId()) {
        case MENU_ADD:
            add();
            break;
        case MENU_DELETE:
            delete();
            break;
        case MENU_UPDATE:
            update();
            break;
        }
        return true;
    }

    public void add() {
        String name = edit_Name.getText().toString();
        String info = edit_Info.getText().toString();
        
        if (name.equals("") || info.equals("")) {
            return;
        }
        mDB.insert(name, info);
//        mCursor.requery();
        new RefreshList().execute();
        edit_Name.setText("");
        edit_Info.setText("");
        Toast.makeText(this, "Add Successed!", Toast.LENGTH_SHORT).show();
    }

    public void delete() {
        if (ID == 0) {
            return;
        }
        mDB.delete(ID);
//        mCursor.requery();
        new RefreshList().execute();
        edit_Name.setText("");
        edit_Info.setText("");
        Toast.makeText(this, "Delete Successed!", Toast.LENGTH_SHORT).show();
    }

    public void update() {
        String name = edit_Name.getText().toString();
        String info = edit_Info.getText().toString();
        // 书名和作者都不能为空,或者退出
        if (name.equals("") || info.equals("")) {
            return;
        }
        mDB.update(ID, name, info);
//        mCursor.requery();
        new RefreshList().execute();
        edit_Name.setText("");
        edit_Info.setText("");
        Toast.makeText(this, "Update Successed!", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {

        mCursor.moveToPosition(position);
        ID = mCursor.getInt(0);
        edit_Name.setText(mCursor.getString(1));
        edit_Info.setText(mCursor.getString(2));

    }

    public class ListAdapter extends BaseAdapter {
        private Context mContext;
        private Cursor mCursor;

        public ListAdapter(Context context, Cursor cursor) {

            mContext = context;
            mCursor = cursor;
        }

        @Override
        public int getCount() {
            return mCursor.getCount();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView mTextView = new TextView(mContext);
            mCursor.moveToPosition(position);
            mTextView.setText(mCursor.getString(1) + "___"
                    + mCursor.getString(2));
            return mTextView;
        }

    }
    
    //步骤1:通过后台线程AsyncTask来读取数据库,放入更换Cursor
    private class RefreshList extends AsyncTask<Void, Void ,Cursor>{
        //步骤1.1:在后台线程中从数据库读取,返回新的游标newCursor
        protected Cursor doInBackground(Void... params) {
            Cursor newCursor =  mDB.select();
            return newCursor;
        }
        //步骤1.2:线程最后执行步骤,更换adapter的游标,并奖原游标关闭,释放资源  
        protected void onPostExecute(Cursor newCursor) {
            adapter.mCursor=newCursor;
            mCursor.close();
            mCursor = newCursor;
            lv.invalidateViews();
        }         
    }
}

 

<RelativeLayout 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: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="com.manhua.sqlitetest.MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:hint="name" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="62dp"
        android:ems="10"
        android:hint="phone" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText2"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="14dp" >
    </ListView>

</RelativeLayout>

 

 

package com.manhua.sqlitetest;

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

// http://www.ibm.com/developerworks/cn/opensource/os-cn-sqlite/index.html

public class DatabaseHelper extends SQLiteOpenHelper {
    private final static String DATABASE_NAME = "test.db";
    private final static int DATABASE_VERSION = 1;
    private final static String TABLE_NAME = "Friends";
    public final static String ID = "id";
    public final static String NAME = "name";
    public final static String INFO = "info";

    public DatabaseHelper(Context context) {
        // TODO Auto-generated constructor stub
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // 创建table
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE " + TABLE_NAME + " (" + ID
                + " INTEGER primary key autoincrement, " + NAME
                + " text, " + INFO + " text);";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
        db.execSQL(sql);
        onCreate(db);
    }

    public Cursor select() {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db
                .query(TABLE_NAME, null, null, null, null, null, null);
        return cursor;
    }

    // 增加操作
    public long insert(String name, String info) {
        SQLiteDatabase db = this.getWritableDatabase();
        /* ContentValues */
        ContentValues cv = new ContentValues();
        cv.put(NAME, name);
        cv.put(INFO, info);
        long row = db.insert(TABLE_NAME, null, cv);
        return row;
    }

    // 删除操作
    public void delete(int id) {
        SQLiteDatabase db = this.getWritableDatabase();
        String where = ID + " = ?";
        String[] whereValue = { Integer.toString(id) };
        db.delete(TABLE_NAME, where, whereValue);
    }

    // 修改操作
    public void update(int id, String name, String info) {
        SQLiteDatabase db = this.getWritableDatabase();
        String where = ID + " = ?";
        String[] whereValue = { Integer.toString(id) };

        ContentValues cv = new ContentValues();
        cv.put(NAME, name);
        cv.put(INFO, info);
        db.update(TABLE_NAME, cv, where, whereValue);
    }
}

 

Android · SQLite

标签:android   style   blog   http   ar   io   color   os   sp   

原文地址:http://www.cnblogs.com/manhua/p/4169574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!