Android的数据存储与访问:一个商品展示

本文介绍了一个简单的购物车应用开发过程,包括使用SQLite进行商品数据的增删改查操作,通过自定义适配器实现商品信息的动态更新,以及在Android平台上实现这些功能的具体代码。

本次任务要求:开发一个购物车,并将购物车里的商品以列表的形式展示,并对购物车中的商品进行增删改查操作。

建立主界面,分为main和item.xml的layout文件。

建立GoodsDao.Java用来实现增删改查方法。主要代码如下:

age cn.bzu.edu.shopshow.dao;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
import cn.bzu.edu.shopshow.entity.Goods;
import cn.bzu.edu.shopshow.db.DBHelper;
/**
 * Created by Administrator on 2017/4/27.
 */
public class GoodsDao {
    private DBHelper dbHelper;
    public GoodsDao(Context context){
    dbHelper=new DBHelper(context,1);
    }
    public void add(Goods goods){
        SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put("name",goods.getName());
        values.put("amount",goods.getAmount());
        long id=sqLiteDatabase.insert("goods",null,values);
        goods.setId(id);
        sqLiteDatabase.close();
    }
    public int delete(long id){
        SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
        int count=sqLiteDatabase.delete("goods","_id=?",new String[]{id+""});
        sqLiteDatabase.close();
        return count;
    }
    public int update(Goods goods){
        SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put("name",goods.getName());
        values.put("amount",goods.getAmount());
        int count=sqLiteDatabase.update("goods",values,"_id=?",new String[]{goods.getId()+""});
        sqLiteDatabase.close();
        return count;
    }
    public List<Goods> queryAll(){
        List<Goods> goodsList=new ArrayList<>();
        SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();
        Cursor cursor=sqLiteDatabase.query("goods",null,null,null,null,null,"amount desc");
        while (cursor.moveToNext()){
            long id=cursor.getLong(cursor.getColumnIndex("_id"));
            String name=cursor.getString(cursor.getColumnIndex("name"));
            int amount=cursor.getInt(cursor.getColumnIndex("amount"));
            Goods goods=new Goods(id,name,amount);
            goodsList.add(goods);
        }
        cursor.close();
        sqLiteDatabase.close();
        return goodsList;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
    DBHelper.java 用来实现数据存入手机存储代码如下:

    package cn.bzu.edu.shopshow.db;


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


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


    public class DBHelper extends SQLiteOpenHelper {
        public static final String CREATE_GOODS="create table goods(_id integer primary key autoincrement,name varchar(20),amount integer)";
        public DBHelper(Context context, int version) {
            super(context, "goods.db", null, version);
        }


        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_GOODS);


        }


        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


        }
    }

    封装一个商品类对应的适配器GoodsAdapter.java:

    package cn.bzu.edu.shopshow;


    import android.content.Context;
    import android.content.DialogInterface;
    import android.support.annotation.NonNull;
    import android.support.v7.app.AlertDialog;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;


    import java.util.List;


    import cn.bzu.edu.shopshow.dao.GoodsDao;
    import cn.bzu.edu.shopshow.entity.Goods;


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


    public class GoodsAdapter extends ArrayAdapter<Goods>{
        private int resounceId;
        private GoodsDao goodsDao;
        private List<Goods> goodsList;


        public GoodsAdapter(Context context, int resource, List<Goods> objects, GoodsDao goodsDao) {
            super(context, resource, objects);
            resounceId=resource;
            goodsList=objects;
            this.goodsDao=goodsDao;
        }


        @NonNull
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final Goods goods=getItem(position);
            View view=null;
            ViewHolder viewHolder;
            if (convertView==null){
                view=LayoutInflater.from(getContext()).inflate(resounceId,null);
                viewHolder=new ViewHolder();
                viewHolder.tvId=(TextView) view.findViewById(R.id.tvId);
                viewHolder.tvName=(TextView)view.findViewById(R.id.tvName);
                viewHolder.tvAmount=(TextView)view.findViewById(R.id.tvAmount);
                viewHolder.ivUp=(ImageView) view.findViewById(R.id.ivUp);
                viewHolder.ivDowm=(ImageView) view.findViewById(R.id.ivDown);
                viewHolder.ivDelete=(ImageView) view.findViewById(R.id.ivDelete);
                view.setTag(viewHolder);
            }else {
                view=convertView;
                viewHolder=(ViewHolder)view.getTag();
            }
            viewHolder.tvId.setText(goods.getId()+"");
            viewHolder.tvName.setText(goods.getName());
            viewHolder.tvAmount.setText(goods.getAmount()+"");


            viewHolder.ivDelete.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v){
                    AlertDialog.Builder builder=new AlertDialog.Builder(getContext());
                    builder.setTitle("你确定要删除吗?");
                    builder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            goodsList.remove(goods);
                            goodsDao.delete(goods.getId());
                            notifyDataSetChanged();
                        }
                    });
                    builder.setNegativeButton("cancle",null);
                    builder.show();
                }
            });
            viewHolder.ivUp.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    goods.setAmount(goods.getAmount()-1);
                    goodsDao.update(goods);
                    notifyDataSetChanged();
                }
            });
            viewHolder.ivDowm.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    goods.setAmount(goods.getAmount()+1);
                    goodsDao.update(goods);
                    notifyDataSetChanged();
                }
            });


            return view;
        }


        class ViewHolder{
            TextView tvId;
            TextView tvName;
            TextView tvAmount;
            ImageView ivUp;
            ImageView ivDowm;
            ImageView ivDelete;
        }

    }

    MainActivity:

    package cn.bzu.edu.shopshow;


    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Toast;


    import java.util.List;


    import cn.bzu.edu.shopshow.dao.GoodsDao;
    import cn.bzu.edu.shopshow.entity.Goods;


    public class MainActivity extends AppCompatActivity {
        private EditText etName;
        private EditText etAmount;
        private ListView lvGoods;
        private GoodsAdapter goodsAdapter;
        private GoodsDao goodsDao;
        private List<Goods> goodsList;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            lvGoods=(ListView)findViewById(R.id.lvGoods);
            etName=(EditText) findViewById(R.id.etName);
            etAmount=(EditText) findViewById(R.id.etAmount);
            goodsDao=new GoodsDao(this);
            goodsList=goodsDao.queryAll();
            goodsAdapter=new GoodsAdapter(this,R.layout.item,goodsList,goodsDao);
            lvGoods.setAdapter(goodsAdapter);




        }
        public void addGoods(View view){
            String name=etName.getText().toString();
            String amount=etAmount.getText().toString();
            if (TextUtils.isEmpty(name)||TextUtils.isEmpty(amount))
                return;
            Goods goods=new Goods(name,Integer.parseInt(amount));
            goodsDao.add(goods);
            goodsList.add(goods);
            goodsAdapter.notifyDataSetChanged();
            etName.setText("");
            etAmount.setText("");
            Toast.makeText(this,"添加成功",Toast.LENGTH_LONG).show();
        }
    }

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值