簡體   English   中英

如何將圖像保存在sqllite數據庫中?

[英]how to save image in sqllite database?

這是我的代碼,在下面瀏覽圖像並選擇圖像,但是如何在數據庫中插入圖像視圖? 此代碼成功顯示在屏幕上的所選圖像上但未存儲在數據庫中如何傳遞圖像參數? 在我評論的那一行/ 我在這里寫的東西 /

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class AddEditCountry extends Activity {

 private long rowID; 
 private EditText nameEt;
 private EditText capEt;
 private EditText codeEt;    
 private EditText Donedate;
 private EditText Notes;
 private EditText Person;
 private  ImageView imageView1;
 Bitmap yourSelectedImage;
 @Override
 public void onCreate(Bundle savedInstanceState) 
 {
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add_country);

    nameEt = (EditText) findViewById(R.id.Address);
    capEt = (EditText) findViewById(R.id.Stage);
    codeEt = (EditText) findViewById(R.id.Dueby);

    Donedate = (EditText) findViewById(R.id.Donedate);

    Notes = (EditText) findViewById(R.id.Notes);
    Person = (EditText) findViewById(R.id.Person);

    imageView1 = (ImageView) findViewById(R.id.imageView1);
    Button Browse = (Button) findViewById(R.id.Browse);

    Browse.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {               
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("image/*");
                startActivityForResult(intent, 0);
        }
    });        

    Bundle extras = getIntent().getExtras(); 

    if (extras != null)
    {
         rowID = extras.getLong("row_id");
         nameEt.setText(extras.getString("name"));  
         capEt.setText(extras.getString("cap"));  
         codeEt.setText(extras.getString("code"));  
         Donedate.setText(extras.getString("Location"));  
         Notes.setText(extras.getString("Notes")); 
         Person.setText(extras.getString("Person")); 
         imageView1.setImageURI(yourSelectedImage);

    }

    Button saveButton =(Button) findViewById(R.id.saveBtn);
    saveButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) 
        {
           if (nameEt.getText().length() != 0)
           {
              AsyncTask<Object, Object, Object> saveContactTask = 
                 new AsyncTask<Object, Object, Object>() 
                 {
                    @Override
                    protected Object doInBackground(Object... params) 
                    {
                       saveContact();
                       return null;
                    }

                    @Override
                    protected void onPostExecute(Object result) 
                    {
                       finish();
                    }
                 }; 

              saveContactTask.execute((Object[]) null); 
           }

           else
           {
              AlertDialog.Builder alert = new  
      AlertDialog.Builder(AddEditCountry.this);
              alert.setTitle(R.string.errorTitle); 
              alert.setMessage(R.string.errorMessage);
              alert.setPositiveButton(R.string.errorButton, null); 
              alert.show();
           }
        } 
    });
   }

   private void saveContact() 
   {
      DatabaseConnector dbConnector = new DatabaseConnector(this);

      if (getIntent().getExtras() == null)
      {
/* what i write here for  image*/          
      dbConnector.insertContact(nameEt.getText().toString(),
                  capEt.getText().toString(),
                  codeEt.getText().toString(),
                  Donedate.getText().toString(),
                  Notes.getText().toString(),
                  Person.getText().toString(), null




                  );
      }
      else
/* what i wirte here for image*/      {
         dbConnector.updateContact(rowID,
            nameEt.getText().toString(),
            capEt.getText().toString(), 
            codeEt.getText().toString(), 
            Donedate.getText().toString(),
         Notes.getText().toString(),
          Person.getText().toString(), null


         );
      }
   }











   protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
       super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

       switch(requestCode) {
       case 0:
           if(resultCode == RESULT_OK){
               Uri selectedImage = imageReturnedIntent.getData();
               String[] filePathColumn = {MediaStore.Images.Media.DATA};

               Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
               cursor.moveToFirst();

               int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
               String filePath = cursor.getString(columnIndex); // file path of selected image
               cursor.close();
                       //  Convert file path into bitmap image using below line.
               yourSelectedImage = BitmapFactory.decodeFile(filePath);

                       // put  bitmapimage in your imageview
               imageView1.setImageBitmap(yourSelectedImage);
           }
       }
    }







}

sqlite中的第一個make字段作為Blob數據類型

比獲取字節並存儲在數據庫中image.getBytes();

或者如果您有位圖而不是轉換為字節數組

並存儲到數據庫中

 public static byte[] getBitmapAsByteArray(Bitmap bitmap, boolean type) {
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    if (type) {
        bitmap.compress(CompressFormat.PNG, 0, outputStream);
    } else {
        bitmap.compress(CompressFormat.JPEG, 0, outputStream);
    }
    return outputStream.toByteArray();
}

請使用下面的代碼將圖像存儲到sqlite數據庫中,它將解決您的問題。

MySQLActivity.java:-

public class MySQLActivity extends Activity implements OnClickListener
{
    protected static TextView textView;
    protected static ImageView bmImage;
    protected Button start;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        bmImage = (ImageView)findViewById(R.id.imageView1);
        textView = (TextView) findViewById(R.id.textView1);

        start = (Button) findViewById(R.id.button1);
        start.setOnClickListener(this); 

        DownloadFile();
    }

    public void onClick(View v) 
    {
        SQLiteDatabase myDb;       
        String MySQL;
        int icount;
        byte[] byteImage1 = null;
        byte[] byteImage2 = null;
        MySQL="create table emp1(_id INTEGER primary key autoincrement, fio TEXT not null, picture BLOB);";
        myDb = openOrCreateDatabase("/sdcard/Nick/MyWeatherDB.db", Context.MODE_PRIVATE, null);

        String s=myDb.getPath();
        textView.append("\r\n" + s+"\r\n");       
        myDb.execSQL("delete from emp1");
        ContentValues newValues = new ContentValues();
        newValues.put("fio", "Иванов Петр Сергеевич");

        /////////// insert picture to blob field ///////////////////// 
        try
        {
            FileInputStream instream = new FileInputStream("/sdcard/Dipak/Keshariya.png"); 
            BufferedInputStream bif = new BufferedInputStream(instream); 
            byteImage1 = new byte[bif.available()]; 
            bif.read(byteImage1); 
            textView.append("\r\n" + byteImage1.length+"\r\n"); 
            newValues.put("picture", byteImage1); 

            long ret = myDb.insert("emp1", null, newValues); 
            if(ret<0) textView.append("\r\n!!! Error add blob filed!!!\r\n");
        } catch (IOException e) {
            textView.append("\r\n!!! Error: " + e+"!!!\r\n");   
        }

        ////////////Read data ////////////////////////////  
        Cursor cur = myDb.query("emp1",null, null, null, null, null, null);
        cur.moveToFirst();
        while (cur.isAfterLast() == false)
        {
            textView.append("\r\n" + cur.getString(1)+"\r\n");
            cur.moveToNext();
        }

        ///////Read data from blob field////////////////////
        cur.moveToFirst();
        byteImage2=cur.getBlob(cur.getColumnIndex("picture"));
        bmImage.setImageBitmap(BitmapFactory.decodeByteArray(byteImage2, 0, byteImage2.length));
        textView.append("\r\n" + byteImage2.length+"\r\n"); 

        //////////////////////////    
        cur.close();
        myDb.close();
  }

  public void DownloadFile() 
  {   
      Bitmap bitmap1 = null;                    
      bitmap1 = BitmapFactory.decodeFile("/sdcard/Dipak/Dipak.jpg"); //weather.png");
      bmImage.setImageBitmap(bitmap1);
  }
}

我建議避免將圖像保存到數據庫,而不僅僅是在android上。

這是有道理的,因為它將減慢與數據庫相關的所有操作。 同樣,游標將無法緩存結果以便在表的行之間移動。

而是將文件名指向應用程序存儲上的路徑。 您還可以添加它的存儲位置(內部/外部存儲)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM