SQLite数据库--案例:商品展示

来源:互联网 发布:js改变display属性 编辑:程序博客网 时间:2024/05/17 21:45

导语:在实际开发中,往往避免不了在界面上操作数据库。例如,开发一个购物车,需要将购物车中的商品以列表的形式展示,并且还需要对购物车中的商品进行增删改查操作。要实现这些功能就需要使用ListView和SQLite数据库。接下来通过一个 “商品展示“案例来实现在界面上操作数据库。 

1.创建程序

首先创建一个名为“商品展示”的应用程序。添加3个TextView,分别用于显示数据库中的某条数据的id,商品名称,金额。三个ImageView用于增加金额,减少金额,删除数据。设计用户交互界面如图: 



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    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="product.itcast.cn.shangpinzhanshi.MainActivity">
     <LinearLayout
         android:id="@+id/addLL"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal">
         <EditText
             android:id="@+id/nameET"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:hint="商品名称"
             android:inputType="textPersonName"/>
         <EditText
             android:id="@+id/balanceET"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:hint="金额"
             android:inputType="number"/>
         <ImageView
             android:onClick="add"
             android:id="@+id/addIV"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content" />
         </LinearLayout>
    <ListView
        android:id="@+id/accountLV"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/addLL">
        </ListView>




</LinearLayout>


2.创建ListView Item布局 




代码展示如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="10dp"
    >
    <TextView
        android:id="@+id/idTV"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="13"
        android:textColor="#000000"
        android:textSize="20sp"/>
    <TextView
        android:id="@+id/nameTV"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:singleLine="true"
        android:text="PQ"
        android:textColor="#000000"
        android:textSize="20sp"


        />
    <TextView
        android:id="@+id/balanceTV"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:singleLine="true"
        android:text="12345"
        android:textColor="#000000"
        android:textSize="20sp" />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <ImageView
            android:id="@+id/upIV"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="2dp"
            android:src="@android:drawable/arrow_down_float"/>
        <ImageView
            android:id="@+id/downIV"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/arrow_down_float"/>
        </LinearLayout>
    <ImageView
        android:id="@+id/deleteIV"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:src="@android:drawable/ic_menu_delete"/>


</LinearLayout>

3.创建数据库 
创建数据库属于数据操作,因此创建一个名为model的包, 
并在该包中定义一个类继承自SQLiteOpenHelper,代码如下:

MyHelper
package product.itcast.cn.shangpinzhanshi.dao;


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


/**
 * Created by Administrator on 2017/4/17.
 */


public class MyHelper extends SQLiteOpenHelper {
    //由于父类没有无参构造函数,所以子类必须指定调用父类哪个有参的构造函数
    public MyHelper(Context context) {
        super(context, "itcast.db", null, 2);
    }
    public void onCreate(SQLiteDatabase db) {
        System.out.println("onCreate");
        db.execSQL("CREATE TABLE account(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),balance INTEGER");
    }
    public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
        System.out.println("onUpgrade");
    }
}

4.创建Account类 
在操作数据库时将数据存放至一个JavaBean对象中操作起来会比较方便。 
因此在model包下定义一个类Account,代码如下:

package product.itcast.cn.shangpinzhanshi.bean;


/**
 * Created by Administrator on 2017/4/17.
 */


public class Account {
    private Long id;
    private  String name;
    private Integer balance;
    public Long getId() {
        return id;
    }


    public String getName() {
        return name;
    }


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


    public Integer getBalance() {
        return balance;
    }


    public void setBalance(Integer balance) {
        this.balance = balance;
    }
 public Account(Long id,String name,Integer balance) {
    super();
    this.id = id;
    this.name = name;
    this.balance = balance;
public Account(String name,Integer balance){
         super();
         this.name = name;
         this.balance = balance;
     }
     public Account(){
         super();
         }
     public String toString(){
        return"[序号:"+id+",商品名称:"+name+",余额:"+balance+"]";
}
    
    
        
    }

5.创建数据操作逻辑类 
在model包下创建一个AccountDao类用于操作数据,来实现数据库的增、删、改、查。代码如下:

AccountDao
package product.itcast.cn.shangpinzhanshi.dao;


import android.accounts.Account;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;


import java.util.List;


import static android.R.id.list;


/**
 * Created by Administrator on 2017/4/17.
 */


public class AccountDao {
    private MyHelper helper;
    public AccountDao(Context context) {
        helper = new MyHelper(context);
    }
    public void insert(Account account) {
        SQLiteDatabase db = helper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name", account.getName());
        values.put("balance", account.getBalance());
        long id = db.insert("account", null, values);
        account.setId(id);
        db.close();
    }


    public int delete(long id) {
        SQLiteDatabase db = helper.getWritableDatabase();
        int count = db.delete("account", "_id=?", new String[]{id + ""});
        db.close();
        return count;
    }


    public int update(Account account) {
        SQLiteDatabase db = helper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name", account.getName());
        values.put("balance", account.getBalance());
        int count = db.update("account", values, "_id=?", new String[]{account.getId() + ""});
        db.close();
        return count;
        public List<Account> queryAll {
            db = helper.getReadableDatabase();
            Cursor c = db.query("account", null, null, null, null, null, "balance DESC");
            while (c.moveToNext()) {
                long id = c.getLong(c.getColumnIndex("_id"));
                String name = c.getString(1);
                int balance = c.getInt(2);
                queryAll.add();
            }
            c.close();
            db.close();
            return list();
        }
    }
}

6.编辑界面交互代码MainActivity



public class MainActivity extends Activity {
 private List<Account> list;
    private AccountDao dao;
    private EditText nameET;
    private EditText balanceET;
    private MyAdapter adapter;
    private ListView accountLV;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        dao=new AccountDao(this);
        list=dao.queryAll();
        adapter=new MyAdapter();
        accountLV.setAdapter(adapter);
    }
    private void initView(){
        accountLV=(ListView)findViewById(R.id.lv01);
        nameET=(EditText)findViewById(R.id.et01);
        balanceET=(EditText)findViewById(R.id.et02);
        accountLV.setOnItemClickListener(new MyOnItemClickListener());
    }
    public void add(View view){
        String name=nameET.getText().toString().trim();
        String balance=balanceET.getText().toString().trim();
        Account a=new Account(name,balance.equals("")?0:Integer.parseInt(balance));
        dao.insert(a);
        list.add(a);
        adapter.notifyDataSetChanged();
        accountLV.setSelection(accountLV.getCount()-1);
        nameET.setText("");
        balanceET.setText("");


    }
    private class MyAdapter extends BaseAdapter{


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


        @Override
        public Object getItem(int position) {
            return list.get(position);
        }


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


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View item=convertView!=null?convertView:View.inflate(getApplicationContext(),R.layout.listview_itemd,null);
            TextView tvid=(TextView)item.findViewById(R.id.tvid);
            TextView tvname=(TextView)item.findViewById(R.id.tvname);
            TextView tvbalance =(TextView)item.findViewById(R.id.tvprice);
            final Account a=list.get(position);
            tvid.setText(a.getId()+"");
            tvname.setText(a.getName());
            tvbalance.setText(a.getBalance()+"");
            ImageView ivup=(ImageView)item.findViewById(R.id.ivup);
            ImageView ivdown=(ImageView)item.findViewById(R.id.ivdown);
            ImageView ivdelete=(ImageView)item.findViewById(R.id.ivdelete);
            ivup.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    a.setBalance(a.getBalance()+1);
                    notifyDataSetChanged();
                    dao.update(a);
                }
            });
            ivdown.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    a.setBalance(a.getBalance()-1);
                    notifyDataSetChanged();
                    dao.update(a);
                }
            });
            ivdelete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    android.content.DialogInterface.OnClickListener listener=new android.content.DialogInterface.OnClickListener(){
                        public void onClick(DialogInterface dialogInterface,int which){
                            list.remove(a);
                            dao.delete(a.getId());
                            notifyDataSetChanged();


                        }
                    };
                    AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
                    builder.setTitle("确定要删除吗?");
                    builder.setPositiveButton("确定",listener);
                    builder.setNegativeButton("取消",null);
                    builder.show();
                }
            });


            return item;
        }
    }
    private class  MyOnItemClickListener implements AdapterView.OnItemClickListener{


        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Account a=(Account)parent.getItemAtPosition(position);
            Toast.makeText(getApplicationContext(),a.toString(),Toast.LENGTH_SHORT).show();
        }
    }
}

1.ListView的setOnClickListener()方法:该方法用于监听Item的点击事件,在使用过该方法时需要传入一个OnItemClickListener的实现类对象,并且需要实现OnitemClick 方法。当点击ListView的Item时就会触发Item的点击事件然后会回调OnItemClick()方法。
2..ListView的setSelection()方法:该方法的作用是设置当前选中的条目。价格当前屏幕一屏只能显示10条数据,当添加到1条数据时,调用此方法就会将第11条数据显示在屏幕上,将第1条数据滑出屏幕外。
3.Adapter的notifyDataSetChange()方法:该方法是用于重新数据,当数据适配器中的内容发生变化时,会调用此方法,重新执行BaseAdapter中的getView()方法。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我住南开区想办公租房不知怎么办 租房提前退房房东不退押金怎么办 体检时候眼睛有一只是弱视怎么办? b本被扣分9分了怎么办 工作调动后在新单位退休医保怎么办 社保卡和医保卡丢了怎么办 医保卡挂失后又找到了怎么办 医保卡丢失忘了卡号怎么办? 医保卡丢了怎么办又记不住卡号 住院发票丢了医保不给报销怎么办 住院期间被医院丢失了医保卡怎么办 大学时的医保卡毕业后丢了怎么办 用身份证注册的移动卡丢了怎么办 用别人身份证办的卡丢了怎么办 济南医保卡挂失后又找到了怎么办 单位没有给办理医保卡的老人怎么办 单位办的医保卡丢了怎么办 北京退休人员医保卡丢了怎么办 普通发票联丢了医保给报销怎么办 手机买好高铁票身份证丢了怎么办 买了高铁票身份证丢了怎么办 小米手机手电简打开不亮了怎么办 华为p7手机显示屏不亮了怎么办 红米手机3x屏幕不灵怎么办? 乐视1s手机字库坏了怎么办 三星c7手机左右两按钮不亮怎么办 手机摔了一屏碎了下黑屏了怎么办 三星手机摔了一下黑屏了怎么办 行驶证一年扣分超过50分怎么办 朋友去广西传销现在骗我怎么办 行驶证忘带交警查住了怎么办 行驶证正本丢了副本在怎么办 在杭州驾照12分扣完了怎么办 驾照审验期过了40天了怎么办 自己的车借给别人撞死了人怎么办 无证驾驶报别人驾驶证被扣车怎么办 交了强制险但驾驶证过期了怎么办 考驾照科目一身份证掉了怎么办 驾照科目二考试身份证丢了怎么办 身份证遗失又要参加考试怎么办啊 驾驶本到期换本有扣分怎么办