質問編集履歴

1 脱字

aaaaaaaaaaaaaa

aaaaaaaaaaaaaa score 77

2016/02/23 13:21  投稿

androidで写真撮影した画像を直接sqliteに書き込みたい
androidで写真撮影した画像を直接sqliteに書き込みたのですが上手くできません。
写真の撮影は指フォルダーに保存できるのですがsqliteに保存が上手くできないです。
androidで写真撮影した画像を直接sqliteに書き込みたいのですが上手くできません。
写真の撮影は指定フォルダーに保存できるのですがsqliteに保存が上手くできないです。
原因がわからないのでわかる方教えていただけますか。
BitmapDB.java
```ここに言語を入力
public class BitmapDB extends SQLiteOpenHelper {
   /**
    * 画像管理テーブル名
    */
   public static final String SAVE_PHOTO_TABLE = "save_photo";
   /**
    * カラム名 画像ファイル名
    */
   public static final String COLUMN_FILE_NAME = "fname";
   /**
    * カラム名 画像バイナリデータ
    */
   public static final String COLUMN_PHOTO_BINARY_DATA = "bdata";
   /**
    * アクセスするデータベース名
    */
   private static final String DB_NAME = "example.db";
   /**
    * DBのバージョン
    */
   private static final int DB_VERSION = 2;
   /**
    * create table文
    */
   private static final String createTableString = "create table "
           + SAVE_PHOTO_TABLE + "(_id integer primary key autoincrement, "
           + COLUMN_FILE_NAME + " text, " + COLUMN_PHOTO_BINARY_DATA
           + " blob)";
   public BitmapDB(Context context) {
       super(context, DB_NAME, null, DB_VERSION);
   }
   @Override
   public void onCreate(SQLiteDatabase db) {
       db.execSQL(createTableString);
   }
   @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       db.execSQL(createTableString);
   }
}
```
mainActivity.java
```ここに言語を入力
public class MainActivity extends Activity {
   private SQLiteDatabase db;
   Button bt;
   SurfaceView sv;
   SurfaceHolder sh;
   Camera cm;
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       LinearLayout ll = new LinearLayout(this);
       ll.setOrientation(LinearLayout.VERTICAL);
       setContentView(ll);
       getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
       bt = new Button(this);
       bt.setText("撮影");
       sv = new SurfaceView(this);
       sh = sv.getHolder();
       sh.addCallback(new SampleSurfaceHolderCallback());
       ll.addView(bt);
       ll.addView(sv);
       bt.setOnClickListener(new SampleClickListener());
   }
   class SampleSurfaceHolderCallback
           implements SurfaceHolder.Callback {
       public void surfaceCreated(SurfaceHolder holder) {
           try {
               cm = Camera.open(0);
               Camera.Parameters pr = cm.getParameters();
               List<Size> ss = pr.getSupportedPictureSizes();
               Size s = ss.get(0);
               pr.setPictureSize(s.width, s.height);
               cm.setParameters(pr);
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
       public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
           try {
               WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
               Display dp = wm.getDefaultDisplay();
               int rt = dp.getRotation();
               int d = 0;
               switch (rt) {
                   case Surface.ROTATION_0:
                       d = 90;
                       break;
                   case Surface.ROTATION_90:
                       d = 0;
                       break;
                   case Surface.ROTATION_180:
                       d = 270;
                       break;
                   case Surface.ROTATION_270:
                       d = 180;
                       break;
               }
               cm.setDisplayOrientation(d);
               cm.setPreviewDisplay(sv.getHolder());
               Camera.Parameters pr = cm.getParameters();
               List<Size> previewSizes = cm.getParameters().getSupportedPreviewSizes();
               Size size = previewSizes.get(0);
               pr.setPreviewSize(size.width, size.height);
               cm.setParameters(pr);
               cm.startPreview();
           } catch (Exception e) {
           }
       }
       public void surfaceDestroyed(SurfaceHolder Holder) {
           cm.stopPreview();
           cm.release();
       }
   }
   class SampleClickListener implements OnClickListener {
       public void onClick(View v) {
           cm.takePicture(null, null, new SamplePictureCallback());
       }
       class SamplePictureCallback implements PictureCallback {
           public void onPictureTaken(byte[] data, Camera c) {
               try {
                   File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download/");
                   if (dir.exists() == false) {
                       dir.mkdir();
                   }
                   Time time = new Time("Asia/Tokyo");
                   time.setToNow();
                   String filename = "pic" + time.month + time.monthDay + time.hour + time.minute + time.second + ".png";
                   File f = new File(dir, filename);
                   ByteArrayOutputStream photo1 = getByteArrayOutputStream(dir+"/"+filename);
                   FileOutputStream fos = new FileOutputStream(f);
                   fos.write(data);
                   Toast.makeText(getApplicationContext(), "撮影完了。", Toast.LENGTH_LONG).show();
                   fos.close();
                   // インスタンス作成
                   BitmapDB helper = new BitmapDB(MainActivity.this);
                   // 読み書き出来るように開く
                   db = helper.getWritableDatabase();
           beginTransaction()  
                   // レコードの一括DELETE
                   db.delete(BitmapDB.SAVE_PHOTO_TABLE, null, null);
                   ContentValues values = new ContentValues();
                   values.put(BitmapDB.COLUMN_FILE_NAME, filename);
                   values.put(BitmapDB.COLUMN_PHOTO_BINARY_DATA, photo1.toByteArray());
                   // トランザクション正常終了
                   db.setTransactionSuccessful();
               } catch (Exception e) {
                   e.printStackTrace();
               }
               try {
                   // レコードを検索してカーソルを作成
                   Cursor cursor = db.query(BitmapDB.SAVE_PHOTO_TABLE,
                           new String[]{"_id", BitmapDB.COLUMN_FILE_NAME,
                                   BitmapDB.COLUMN_PHOTO_BINARY_DATA}, null,
                           null, null, null, null);
                   // カーソルから値を取り出す
                   ImageView iv = new ImageView(MainActivity.this);
                   while (cursor.moveToNext()) {
                       // idとファイル名を受け取りTextViewとして表示
                       String str = cursor.getString(cursor.getColumnIndex("_id")) + "\t"
                               + cursor.getString(cursor
                               .getColumnIndex(BitmapDB.COLUMN_FILE_NAME));
                       TextView tv = new TextView(MainActivity.this);
                       tv.setText(str);
                       // BLOBをbyte[]で受け取る.
                       byte blob[] = cursor
                               .getBlob(cursor
                                       .getColumnIndex(BitmapDB.COLUMN_PHOTO_BINARY_DATA));
                       // byte[]をビットマップに変換しImageViewとして表示
                       Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0, blob.length);
                       iv.setImageBitmap(bmp);
                       iv.setScaleType(ImageView.ScaleType.FIT_XY);//
                       iv.setAdjustViewBounds(true);//
                   }
                   Dialog dialog = new Dialog(MainActivity.this);
                   dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
                   dialog.setContentView(iv);
                   dialog.show();
                   cm.startPreview();
                   // カーソルクローズ
                   cursor.close();
                   // DBクローズ
                   db.close();
               } catch (Exception e) {
               }
           }
       }
       private ByteArrayOutputStream getByteArrayOutputStream(String fileName) {
           // 返却するByteArrayOutputStream
           ByteArrayOutputStream retStream = new ByteArrayOutputStream();
           try {
               // assetsから画像ファイルを読み込みBufferedInputStreamを作成
               BufferedInputStream iS = new BufferedInputStream(getAssets().open(fileName));
               // 書き込み用int
               int writeInt;
               // ByteArrayOutputStreamに画像ファイルを書き込む
               while ((writeInt = iS.read()) != -1) {
                   retStream.write(writeInt);
               }
               // inputstreamのクローズ
               try {
                   iS.close();
               } catch (Exception e) {
                   e.printStackTrace();
               }
           } catch (IOException e) {
               e.printStackTrace();
           }
           return retStream;
       }
   }
}
```
  • Java

    23817 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • SQLite

    1352 questions

    SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

  • Android

    10090 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    6475 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る