SQLite的使用------多张图片存储

上一篇说了SQLite的使用------单张图片存储,本片说说多张图片资源的存储,删除,在文章最后附上DEMO

先上两张图片:

为什么要存储图片:

      1、手机数据大多都是从网络加载的,不存储,每次滚动界面都要从新发送网络请求加载数据,浪费流量尤其是图片

     2、当用户没网的时候,就不能正常显示界面了

     3、将数据存储到本地,不用每次加载,没网的时候也可从本地存储的数据拿来显示

一、第一步创建好数据库,表名,字段名

//创建数据库
public class DBHelper extends SQLiteOpenHelper
{
	public DBHelper(Context context) {
		super(context, Gloable.DB_NAME, null, Gloable.DB_VERSION);
	}

	/**
	 * 创建数据库
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		String sql = "CREATE TABLE IF NOT EXISTS "
				+ Gloable.TABLE_NAME
				+ "(id INTEGER PRIMARY KEY  NOT NULL,pictureId INTEGER  NOT NULL,pictureName varchar not null)";
		db.execSQL(sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

	}
}

二、这里对数据库进行操作,单独封装一个操作类

public class DBContror {
    private DBHelper picdb;
    private List<Picture> all = new ArrayList<Picture>();

    public DBContror(Context context) {
        picdb = new DBHelper(context);
        all = queryAllItem(); // 查询全部数据
        // 如果不存在数据就初始化数据库并添加数据
        if (all.size() > 0) {

        } else {
            initDB(getData());
        }
    }

    /**
     * 数据库初始化
     *
     * @param value
     * @return
     */
    private long initDB(List<Picture> value) {
        long row = 0;
        SQLiteDatabase db = picdb.getWritableDatabase();
        picdb.onCreate(db);
        ContentValues values = null;
        Picture map = null;
        try {
            while (value.size() > 0) {
                map = value.remove(0);
                values = new ContentValues();
                values.put("pictureId", map.getImageId());
                values.put("pictureName", map.getTitle());
                row = db.insert(Gloable.TABLE_NAME, null, values);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (db.isOpen()) {
                db.close();
            }
        }
        return row;
    }

    /**
     * 添加数据
     *
     * @param picBean
     * @return
     */
    public long insertItem(Picture picBean) {
        long row = 0;
        try {
            SQLiteDatabase db = picdb.getWritableDatabase();
            picdb.onCreate(db);
            ContentValues contentValues = new ContentValues();
            contentValues.put("pictureId", picBean.getImageId());
            contentValues.put("pictureName", picBean.getTitle());
            row = db.insert(Gloable.TABLE_NAME, null, contentValues);
            db.close();
        } catch (Exception e) {
        }
        return row;
    }

    /**
     * 按名称删除指定名称(name)的数据
     *
     * @param name
     * @return
     */
    public int deleteById(String name) {
        int i = 0;
        try {
            String[] sb = new String[1];
            sb[0] = name;
            SQLiteDatabase db = picdb.getWritableDatabase();
            picdb.onCreate(db);
            i = db.delete(Gloable.TABLE_NAME, "pictureName=?", sb);
        } catch (Exception e) {
        }
        return i;
    }

    /**
     * 查询数据库中是否存在名称为name的数据
     *
     * @param name
     * @return
     */
    public boolean checkByName(String name) {
        Cursor cursor;
        try {

            SQLiteDatabase db = picdb.getWritableDatabase();
            picdb.onCreate(db);
            cursor = db.query(Gloable.TABLE_NAME, null, "pictureName=?",
                    new String[]{name}, null, null, null);
            cursor.moveToFirst();
            int count = cursor.getCount();
            db.close();
            if (count > 0) {
                cursor.close();
                return true;
            }
            cursor.close();
        } catch (Exception e) {
        }
        return false;
    }

    /**
     * 查询数据库所有的数据
     *
     * @return
     */
    public List<Picture> queryAllItem() {
        SQLiteDatabase db = picdb.getReadableDatabase();
        picdb.onCreate(db);
        List<Picture> pictures = new ArrayList<Picture>();
        try {
            Cursor cursor = db.query(Gloable.TABLE_NAME, null, null, null,
                    null, null, null);
            while (cursor.moveToNext()) {
                Picture picture = new Picture();
                picture.setImageId(cursor.getInt(cursor
                        .getColumnIndex("pictureId")));
                picture.setTitle(cursor.getString(cursor
                        .getColumnIndex("pictureName")));
                pictures.add(picture);
            }
            cursor.close();
            db.close();
        } catch (Exception e) {
        }
        return pictures;
    }

    /**
     * 查看picture数据库是否已经存在该图片
     */
    public boolean checkPic(Picture picture) {
        try {
            SQLiteDatabase db = picdb.getWritableDatabase();
            picdb.onCreate(db);
            String clientCode = picture.getTitle();
            Cursor cursor = db.query(Gloable.TABLE_NAME, null, "pictureName=?",
                    new String[]{clientCode}, null, null, null);
            cursor.moveToFirst();
            int count = cursor.getCount();
            db.close();
            if (count > 0) {
                cursor.close();
                return true;
            }
            cursor.close();
        } catch (Exception e) {
        }
        return false;
    }

    /**
     * 初始化添加系统数据
     *
     * @return
     */
    private List<Picture> getData() {
        List<Picture> list = new ArrayList<Picture>();
        for (int i = 0; i < Gloable.IMAGES.length; i++) {
            Picture picture = new Picture();
            picture.setImageId(Gloable.IMAGES[i]);
            picture.setTitle(Gloable.TITLES[i]);
            list.add(picture);
        }
        return list;
    }

数据库的类就是这两个,接下来就是界面的增加与删除操作

三、主界面中初始化数据库,并先查询数据库中是否有数据,先后获取显示

public class MainActivity extends Activity implements View.OnClickListener {
    private GridView gridView;
    private PictureAdapter adapter;
    private DBContror dbcon;
    private List<Picture> mylist;
    private Intent intent;
    private Button mhelp_btn;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);
        mhelp_btn = (Button) findViewById(R.id.help_btn);
        mhelp_btn.setOnClickListener(this);
        TextView tv = (TextView) findViewById(R.id.maintextTile);
        tv.setText(R.string.main_menu);

        dbcon = new DBContror(this);// 初始化数据库
        mylist = dbcon.queryAllItem();// 查询数据库中的全部数据,并存放到List<Picture>中

        intent = new Intent();

        gridView = (GridView) findViewById(R.id.gridview);

        adapter = new PictureAdapter(mylist, this);// 自定义适配器
        gridView.setAdapter(adapter);

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {
                OnClickGridViewItem(position);// 点击事件
            }
        });
    }

    /**
     * GridView中图标点击事件
     *
     * @param position
     */
    protected void OnClickGridViewItem(int position) {
        String result = mylist.get(position).getTitle();
        if (result.endsWith("测试")) {
            // 进入AppStoreActivity
            intent.setClass(MainActivity.this, AppStoreActivity.class);
            MainActivity.this.startActivity(intent);
        } else {
            Toast.makeText(MainActivity.this, mylist.get(position).getTitle(),
                    Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        mylist = dbcon.queryAllItem();
        adapter = new PictureAdapter(mylist, this);
        adapter.notifyDataSetChanged();
        gridView.setAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);//功能菜单键
        return true;
    }

    /**
     * 功能菜单选项 
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.About:
                Toast.makeText(MainActivity.this, "关于", Toast.LENGTH_SHORT).show();
                break;
            case R.id.Exit:
                // Toast.makeText(MainActivity.this, "退出", Toast.LENGTH_SHORT).show();
                ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
                am.restartPackage(getPackageName());
                intent.setClass(this, MainActivity.class);
                Intent i = new Intent(Intent.ACTION_MAIN);
                i.addCategory(Intent.CATEGORY_HOME);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                startActivity(i);
                break;
            default:
                break;
        }
        return false;
    }

    /**
     * 管理应用(删除操作)
     *
     * @param view
     */
    public void OnManage(View view) {
//        Intent in=new Intent(MainActivity.this, ManageActivity.class);//删除图片放开
        Intent in = new Intent(MainActivity.this, AppStoreActivity.class);//增加图片放开
        startActivity(in);

    }

    /**
     * 禁用返回键
     */
    public void onBackPressed() {

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.help_btn:
//                Intent sel = new Intent(MainActivity.this, SelActivity.class);//这里准备做相册选择多张图片存储(未完成)
//                startActivity(sel);
                break;
        }
    }
}

四、图片添加类,这里只是固定了几个资源图片,将资源图片添加到主界面中,存储到数据库。

public class AppStoreActivity extends Activity {

    private static final int REQUEST_CAMERA_CODE = 10;
    private static final int REQUEST_PREVIEW_CODE = 20;
    private ArrayList<String> imagePaths = new ArrayList<>();

    private GridView gridView_sel;
    private GridAdapter gridAdapter;
    private TextView tv_click;
    private EditText textView;
    private String TAG = MainActivity.class.getSimpleName();


    private GridView gridView;
    private PictureAdapter adapter;
    private Intent intent;
    private List<Picture> mylist;
    private DBContror dbcon;
//资源名
    public String[] addtitles = new String[]{"DB1", "DB2", "DB3", "DB4", "DB5",
            "DB6"};
//资源图片
    public Integer[] addimages = new Integer[]{
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

//        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.manage);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);
        TextView tv = (TextView) findViewById(R.id.adddeltextTile);
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent in = new Intent(AppStoreActivity.this, SelActivity.class);
                startActivity(in);
            }
        });
        tv.setText(R.string.add);

        dbcon = new DBContror(this);
        intent = new Intent();
        gridView = (GridView) findViewById(R.id.gridview);

        mylist = new ArrayList<Picture>();
        for (int i = 0; i < addtitles.length; i++) {
            Picture newPic = new Picture();
            newPic.setImageId(addimages[i]);
            newPic.setTitle(addtitles[i]);
            mylist.add(newPic);
        }

        adapter = new PictureAdapter(mylist, this);
        gridView.setAdapter(adapter);

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {
              
            }
        });
//长按item进行添加图片
        gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                if (dbcon.checkByName(mylist.get(position).getTitle())) {
                    Toast.makeText(AppStoreActivity.this,
                            "该应用已经存在无法再次添加!正在返回请稍后……", Toast.LENGTH_SHORT)
                            .show();
                } else {
                    dbcon.insertItem(mylist.get(position));
                    adapter.notifyDataSetChanged();
                    Toast.makeText(AppStoreActivity.this, "添加成功!正在返回请稍后……",
                            Toast.LENGTH_SHORT).show();
                }
                intent.setClass(AppStoreActivity.this, MainActivity.class);
                AppStoreActivity.this.startActivity(intent);
                return false;
            }
        });
    }


  
    /**
     * 返回主页
     *
     * @param view
     */
    public void onMain(View view) {
        intent.setClass(AppStoreActivity.this, MainActivity.class);
        AppStoreActivity.this.startActivity(intent);
    }

    /**
     * 禁用返回键
     */
    public void onBackPressed() {

    }


  
  

五、 此类为删除图片类,删除选中的图片更新列表。

public class ManageActivity extends Activity{
    private GridView gridView;
    private PictureAdapter adapter;
    private Intent intent;
    private DBContror dbcon;
    private List<Picture> mylist;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.manage);
//        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);
        TextView tv = (TextView) findViewById(R.id.adddeltextTile);
        tv.setText(R.string.delete);

        dbcon = new DBContror(this);
        mylist = dbcon.queryAllItem();

        intent = new Intent();

        gridView = (GridView) findViewById(R.id.gridview);

        adapter = new PictureAdapter(mylist, this);
        gridView.setAdapter(adapter);

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {
                if (position < 2) {
                    Toast.makeText(ManageActivity.this, "系统应用,无法删除!正在返回请稍后……",
                            Toast.LENGTH_SHORT).show();
                } else {
                    dbcon.deleteById(mylist.get(position).getTitle());
                    adapter.notifyDataSetChanged();
                    Toast.makeText(ManageActivity.this, "删除成功!正在返回请稍后……",
                            Toast.LENGTH_SHORT).show();
                }
                onBack(null);
            }
        });
    }

    public void onBack(View view) {
        intent.setClass(ManageActivity.this, MainActivity.class);
        ManageActivity.this.startActivity(intent);
    }

    public void onMain(View view) {
        intent.setClass(ManageActivity.this, MainActivity.class);
        ManageActivity.this.startActivity(intent);
    }

    /**
     * 禁用返回键
     */
    public void onBackPressed() {

    }

比较简单的一个例子,主要代码已贴,代码没有整理比较凌乱,不影响学习,demo无BUG可执行。

百度网盘:下载   提取码:6qdr

CSDN:下载

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

generallizhong

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值