Android保存本地图片到SQLite

来源:互联网 发布:template.js if else 编辑:程序博客网 时间:2024/05/28 16:28

被否了以后竟然布置了一个完全不daga的需求,明明做了几个月,也演示了好多次,可现在说要重头做,做得不对。可你为什么不早说??,这就不是我可以心大地理解的范围了,四个月的努力一句做偏了,虽然做的很初级的东西,但是我只是一个很初级的小白,告诉朋友们,他们都同情我这个被玩的不成样子的小白,这是多不靠谱不负责的老师啊,但是努力还是要做,任务还是要完成,继续吧,真的很想毕业啊,毕竟项目还是要完成

现在的需求是:通过蓝牙获取图片、文字,然后通过安卓客户端中转,发送到服务器,

蓝牙—》APP,暂且不理,想想就觉得不容易,从来没碰过蓝牙协议,反正我不会

现在尝试了将文字、图片存储到了SQLite,但是效果很不好,因为图片多了,数据库就会变得很大,这里是将图片直接存到数据库的。虽然不能达到理想效果,但是还是先记录下来吧,也不是自己写的,但是从哪里抄来的也忘记了,所以直接点了转载

MainActivity

import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private DBOperate dbOperate;    private SQLiteHelper helper;    private Button read;    private Button save;    private ImageView showImv;    private TextView id, carnum, breakrule;    private String url;    //要操作数据库操作实例首先得得到数据库操作实例    private Context context;    //要操作数据库操作实例首先得得到数据库操作实例    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        helper = new SQLiteHelper(this, "REBOT.db", null, 2);        init();        read.setOnClickListener(this);        save.setOnClickListener(this);        showImv.setOnClickListener(this);    }    private void init() {        dbOperate = new DBOperate(this);        read = (Button) findViewById(R.id.readBtn);        save = (Button) findViewById(R.id.saveBtn);        showImv = (ImageView) findViewById(R.id.showImv);        id = (TextView) findViewById(R.id.id);        carnum = (TextView) findViewById(R.id.carnum);        breakrule = (TextView) findViewById(R.id.breakrule);    }    public void onClick(View view) {        switch (view.getId()) {            case R.id.saveBtn:                save(url);                break;            case R.id.readBtn:                showtable();                break;            default:                break;        }    }    private void showtable() {        SQLiteDatabase db = helper.getWritableDatabase();        Cursor cursor = db.query("User", null, null, null, null, null, null);        if (cursor.moveToFirst())        {            do{                id.setText(cursor.getString(cursor.getColumnIndex("_id")));                carnum.setText(cursor.getString(cursor.getColumnIndex("carnum")));                breakrule.setText(cursor.getString(cursor.getColumnIndex("breakrule")));                Log.d("1",cursor.getString(cursor.getColumnIndex("_id")));                Log.d("2",cursor.getString(cursor.getColumnIndex("carnum")));                byte[] imgData=dbOperate.readImage();                if (imgData!=null) {                    //将字节数组转化为位图                    Bitmap imagebitmap = BitmapFactory.decodeByteArray(imgData, 0, imgData.length);                    //将位图显示为图片                    showImv.setImageBitmap(imagebitmap);                }else {                    showImv.setBackgroundResource(android.R.drawable.menuitem_background);                }            }        while (cursor.moveToNext()) ;    }        cursor.close();    }    private void save(String url){        dbOperate.save();    }}
SQLiteHelper
//SQLite

import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by 允琪 on 2017/4/15. */public class SQLiteHelper extends SQLiteOpenHelper {    private static final String dbname="REBOT.db";    private static final int version=2;    private static  SQLiteHelper dbHelper;    //也可以不指定字段的类型、长度,因为int类型也可以保存Char类型的创建学生表    private final String createTb="CREATE TABLE User (_id INTEGER PRIMARY KEY AUTOINCREMENT,carnum VARCHAR2,breakrule VARCHAR,avatar BLOB)";    public SQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {        super(context, name, factory, version);    }    public SQLiteHelper(Context context){        super(context, dbname, null, version);    }    public static SQLiteHelper getInstance(Context context) {        if (dbHelper == null) { //单例模式            dbHelper = new SQLiteHelper(context);        }        return dbHelper;    }    @Override    public void onCreate(SQLiteDatabase db) {        // 创建一个数据库表 User ,字段:_id、name、avatar。        db.execSQL(createTb);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}
类DBOperate

import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import java.io.ByteArrayOutputStream;import java.io.IOException;/** * Created by 允琪 on 2017/4/15. */public class DBOperate {    private SQLiteHelper dbhelper;    private Context context;    //要操作数据库操作实例首先得得到数据库操作实例    public DBOperate(Context context) {        this.context=context;        this.dbhelper = SQLiteHelper.getInstance(context);    }    public void save(){        SQLiteDatabase db = dbhelper.getWritableDatabase();        Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.camera);        ContentValues cv=new ContentValues();//        cv.put("_id", 1);        cv.put("carnum","苏F1234");        cv.put("breakrule","违章");        cv.put("avatar", bitmabToBytes(context));//图片转为二进制        db.insert("User", null, cv);        cv.clear();        cv.put("carnum","苏A1F33");        cv.put("breakrule","闯红灯");        cv.put("avatar", second(context));//图片转为二进制        db.insert("User", null, cv);//        cv.clear();//        cv.put("carnum","苏A84G5");//        cv.put("breakrule","超速");//        cv.put("avatar", bitmabToBytes(context));//图片转为二进制//        db.insert("User", null, cv);//        cv.clear();////        cv.put("carnum","苏A18D4");//        cv.put("breakrule","压线");//        cv.put("avatar", bitmabToBytes(context));//图片转为二进制//        db.insert("User", null, cv);//        cv.clear();        db.close();    }    public byte[] readImage(){        SQLiteDatabase db = dbhelper.getWritableDatabase();        Cursor cur=db.query("User", new String[]{"_id","avatar"}, null, null, null, null, null);        byte[] imgData=null;        if(cur.moveToNext()){            //将Blob数据转化为字节数组            imgData=cur.getBlob(cur.getColumnIndex("avatar"));        }        return imgData;    }    //图片转为二进制数据    public byte[] bitmabToBytes(Context context){        //将图片转化为位图        Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.camera);        int size = bitmap.getWidth() * bitmap.getHeight() * 4;        //创建一个字节数组输出流,流的大小为size        ByteArrayOutputStream baos= new ByteArrayOutputStream(size);        try {            //设置位图的压缩格式,质量为100%,并放入字节数组输出流中            bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);            //将字节数组输出流转化为字节数组byte[]            byte[] imagedata = baos.toByteArray();            return imagedata;        }catch (Exception e){        }finally {            try {                bitmap.recycle();                baos.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return new byte[0];    }    public byte[] second(Context context){        //将图片转化为位图        Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.qin);        int size = bitmap.getWidth() * bitmap.getHeight() * 4;        //创建一个字节数组输出流,流的大小为size        ByteArrayOutputStream baos= new ByteArrayOutputStream(size);        try {            //设置位图的压缩格式,质量为100%,并放入字节数组输出流中            bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);            //将字节数组输出流转化为字节数组byte[]            byte[] imagedata = baos.toByteArray();            return imagedata;        }catch (Exception e){        }finally {            try {                bitmap.recycle();                baos.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return new byte[0];    }}
布局文件
<RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    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="com.example.uploadpic.MainActivity">    <Button        android:text="read"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:layout_alignParentRight="true"        android:layout_alignParentEnd="true"        android:id="@+id/readBtn"/>    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/saveBtn"        android:layout_centerHorizontal="true"        android:layout_marginTop="124dp"        android:id="@+id/showImv"/>    <Button        android:text="save"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/saveBtn"        android:layout_alignParentTop="true"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"/>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/saveBtn"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"        android:layout_marginLeft="12dp"        android:layout_marginStart="12dp"        android:layout_marginTop="22dp"        android:id="@+id/id"        android:textSize="24sp"/>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBottom="@+id/id"        android:layout_alignRight="@+id/showImv"        android:layout_alignEnd="@+id/showImv"        android:id="@+id/carnum"/>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBottom="@+id/carnum"        android:layout_alignParentRight="true"        android:layout_alignParentEnd="true"        android:layout_marginRight="53dp"        android:layout_marginEnd="53dp"        android:id="@+id/breakrule"/></RelativeLayout>







0 0
原创粉丝点击