0

画像と詳細を保存する顧客用のアプリを作成しています。カメラやSDカードで画像を閲覧しています。SDカードで画像を取得していImageViewますが、データベースに挿入すると、データベースの画像列に挿入されません。

SDカードボタンをクリックして画像を参照しています。この画像は に表示されImageViewます。

Button btnsdcard = (Button) findViewById(R.id.custbtnimage);
    btnsdcard.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(i, ACTIVITY_SELECT_IMAGE);
        }
    });

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case 1:
        if (resultCode == RESULT_OK) {
            Uri selectedImage = data.getData();
            try {
                InputStream imgstream = getContentResolver()
                        .openInputStream(selectedImage);
                Bitmap btm = BitmapFactory.decodeStream(imgstream);
                ImageView img = (ImageView) findViewById(R.id.imagecust);
                img.setImageBitmap(btm);
                ByteArrayOutputStream bo = new ByteArrayOutputStream();
                btm.compress(Bitmap.CompressFormat.PNG, 100, bo);
                byte[] custimage = bo.toByteArray();
            } catch (FileNotFoundException e) {                 
                e.printStackTrace();
                Toast.makeText(getBaseContext(), "file not fount",
                        Toast.LENGTH_SHORT).show();
            }
    }   }
    }

データベースの他のデータストアの保存ボタンをクリックすると、データベースの画像列が空になり、エラーは発生しません。

    btnsave.setOnClickListener(new OnClickListener() {

        @SuppressLint("ParserError")
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String name = custname.getText().toString();
            String address = custaddress.getText().toString();
            Long pincode = Long.parseLong(custpincode.getText().toString());
        String city = custcity.getText().toString();


            byte[] image=custimage;

            Customerprofile profile = new Customerprofile();
            profile.setName(name);
            profile.setAddress(address);
            profile.setPincode(pincode);
            profile.setCity(city);
            profile.setImage(image);

            insertcust(profile);
                        }

        private void insertcust(Customerprofile profile) {
            // TODO Auto-generated method stub
            DatabaseHelper mydbhelper = new DatabaseHelper(Myimage.this);
            SQLiteDatabase db = mydbhelper.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put(DatabaseHelper.KEY_NAME, profile.getName());
            values.put(DatabaseHelper.KEY_ADDRESS, profile.getAddress());
            values.put(DatabaseHelper.KEY_PINCODE, profile.getPincode());
            values.put(DatabaseHelper.KEY_CITY, profile.getCity());
            values.put(DatabaseHelper.KEY_IMAGE, profile.getImage());

            long adcid = db.insert(DatabaseHelper.DATABASE_TABLE, null,
                    values);

            db.close();


        }
    });
}

私のImageView画像をデータベースに保存するための解決策を教えてください。

4

1 に答える 1

0

実際には、画像をDB以外の場所に保存し、画像へのパスをDBに配置する必要があります。

本当にデータベースに入れたい場合は、BLOBそれを格納するタイプの列を作成する必要があります(DB構造を表示しないので、これについて説明します)。

次に、画像をバイト配列に変換してから、データベースに保存する必要があります。コードを見ると、すべてを実行しているように見えます...

問題が見つかりました。ローカル変数を使用していて、スコープ外でそれらを参照しようとしています。あなたはあなたbyte[] custimage = bo.toByteArray();の中にいて、それが範囲外のときにあなたの中onActivityResultでそれを使おうとします。 byte[] image=custimage;onClick

custimageすべてのメソッドがアクセスできるようにクラスフィールドとして宣言しbyte[] custimage;、オカレンスをに変更するonActivityResultcustimage = bo.toByteArray();、動作を開始します。

于 2012-07-04T11:32:19.683 に答える