如何在数据库中存储图像android [复制]

前端之家收集整理的这篇文章主要介绍了如何在数据库中存储图像android [复制]前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > How to save images into Database3个
我是android的新手,我正在创建一个联系人管理器.我已经研究了如何将EditText字段中的值存储到数据库中,但我不知道如何在数据库中存储图像.我想知道是否有人可以帮助我. @H_301_3@package awad865.project.ContactManager1; import java.io.FileNotFoundException; import java.io.InputStream; import android.app.Activity; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.database.sqlException; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.NavUtils; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageButton; import android.widget.Spinner; public class AddContact extends Activity { //declare private fields private EditText firstName; private EditText lastName; private EditText number; private EditText address; private EditText date; private EditText email; private Spinner numberSpinner; private Spinner emailSpinner; private Spinner addressSpinner; private Spinner dateSpinner; private DatabaseHandler databaseHandler; private ImageButton addPic; private final int IMAGE_SELECTION =1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_contact); //code that enables the title on the action bar getActionBar().setDisplayShowTitleEnabled(true); getActionBar().setDisplayHomeAsUpEnabled(true); databaseHandler = new DatabaseHandler(this); //intialise private fields firstName = (EditText)findViewById(R.id.edit_first_name); lastName = (EditText)findViewById(R.id.edit_last_name); number = (EditText)findViewById(R.id.edit_number); address = (EditText)findViewById(R.id.edit_address); date = (EditText)findViewById(R.id.edit_date); email =(EditText)findViewById(R.id.edit_email); //Spinner for the phone number field numberSpinner = (Spinner) findViewById(R.id.contact_number_spinner); // Create an ArrayAdapter using the string array and a default spinner layout ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.number_array,android.R.layout.simple_spinner_item); // Specify the layout to use when the list of choices appears adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Apply the adapter to the spinner numberSpinner.setAdapter(adapter); //Spinner for the email address field emailSpinner = (Spinner) findViewById(R.id.contact_email_spinner); adapter = ArrayAdapter.createFromResource(this,R.array.email_array,android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); emailSpinner.setAdapter(adapter); //Spinner for address field addressSpinner = (Spinner) findViewById(R.id.contact_address_spinner); adapter= ArrayAdapter.createFromResource(this,R.array.address_array,android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); addressSpinner.setAdapter(adapter); //Spinner for date dateSpinner = (Spinner) findViewById(R.id.contact_date_spinner); adapter=ArrayAdapter.createFromResource(this,R.array.date_array,android.R.layout.simple_spinner_dropdown_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); dateSpinner.setAdapter(adapter); addPic = (ImageButton) findViewById(R.id.addImage); Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.contacts_photo); addPic.setImageBitmap(bm); addPic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Intent imageIntent = new Intent(Intent.ACTION_PICK); imageIntent.setType("image/*"); startActivityForResult(imageIntent,IMAGE_SELECTION); } }); } protected void onActivityResult(int requestCode,int resultCode,Intent imageReturnedIntent){ super.onActivityResult(requestCode,resultCode,imageReturnedIntent); switch(requestCode){ case IMAGE_SELECTION: if(resultCode == RESULT_OK){ try{ BitmapFactory.Options options = new BitmapFactory.Options(); options.inScaled = true; final Uri imageURI = imageReturnedIntent.getData(); final InputStream inStr = getContentResolver().openInputStream(imageURI); final Bitmap selectImg = BitmapFactory.decodeStream(inStr,null,options); addPic.setImageBitmap(selectImg); }catch(FileNotFoundException ex){ Log.e("File not found","Selected image was not found",ex); } } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.add_contact,menu); return true; } public boolean onOptionsItemSelected(MenuItem item){ switch(item.getItemId()){ //if the save button is pressed,then all the information is retrieved from the EditText fields //and stored in the private fields and then a new contact object is created and added to the //database case R.id.action_save: //WANT to save the image here BitmapDrawable bmd = ((BitmapDrawable) addPic.getDrawable()); Bitmap photo = bmd.getBitmap(); Contact contact = new Contact(firstName.getText().toString(),lastName.getText().toString(),number.getText().toString(),numberSpinner.getSelectedItem().toString(),email.getText().toString(),emailSpinner.getSelectedItem().toString(),date.getText().toString(),dateSpinner.getSelectedItem().toString(),address.getText().toString(),addressSpinner.getSelectedItem().toString(),"false"); //add to database try { databaseHandler.openDataBase(); databaseHandler.addContact(contact); databaseHandler.close(); } catch (sqlException sqle) { throw sqle; } //go back to list of contacts Intent intentMain = new Intent(getApplicationContext(),MainActivity.class); intentMain.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intentMain); return true; //if the cancel button is pressed on the action bar then the user is navigate to MainActivity case R.id.action_cancel: Intent intentCancel = new Intent(this,MainActivity.class); intentCancel.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intentCancel); return true; //if the up button is pressed,then the user is taken back to the MainActivity case android.R.id.home: NavUtils.navigateUpFromSaMetask(this); return true; default: return super.onOptionsItemSelected(item); } } }

我的DatabaseHandler类:

@H_301_3@package awad865.project.ContactManager1; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.Blob; import java.util.ArrayList; import java.util.List; import org.apache.http.util.ByteArrayBuffer; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlException; import android.database.sqlite.sqliteDatabase; import android.database.sqlite.sqliteException; import android.database.sqlite.sqliteOpenHelper; import android.graphics.Bitmap; import android.util.Log; public class DatabaseHandler extends sqliteOpenHelper { //declaring contants private static String DB_NAME = "ContactsDb"; private static final int DB_VERSION = 1; private static String DB_PATH = "/data/data/awad865.project.ContactManager1/databases/"; private final Context myContext; private sqliteDatabase myDataBase; private static final String TABLE_CONTACT = "Contact"; private static final String FIRST_NAME = "firstname"; private static final String LAST_NAME = "lastname"; private static final String NUMBER = "number"; private static final String NUMBER_TYPE = "numbertype"; private static final String EMAIL = "email"; private static final String EMAIL_TYPE = "emailtype"; private static final String DATE = "date"; private static final String DATE_TYPE = "datetype"; private static final String ADDRESS = "address"; private static final String ADDRESS_TYPE = "addresstype"; private static final String IMAGE = "image"; private static final String FAVOURITE = "favourite"; //the parent constructor is called public DatabaseHandler(Context context) { super(context,DB_NAME,DB_VERSION); this.myContext = context; } //method for creating the database public void createDataBase() throws IOException{ boolean dbExist = checkDataBase(); if(dbExist){ //copyDataBase(); }else{ //By calling this method and empty database will be created into the default system path //of your application so we are gonna be able to overwrite that database with our database. this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } } private boolean checkDataBase(){ sqliteDatabase checkDB = null; try{ String myPath = DB_PATH + DB_NAME; checkDB = sqliteDatabase.openDatabase(myPath,sqliteDatabase.OPEN_READONLY); }catch(sqliteException e){ //database does't exist yet. } if(checkDB != null){ checkDB.close(); } return checkDB != null ? true : false; } private void copyDataBase() throws IOException{ //Open your local database as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty database String outFileName = DB_PATH + DB_NAME; //Open the empty database as the output stream OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer,length); } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws sqlException{ //Open the database String myPath = DB_PATH + DB_NAME; myDataBase = sqliteDatabase.openDatabase(myPath,sqliteDatabase.OPEN_READONLY); } @Override public synchronized void close() { if(myDataBase != null) myDataBase.close(); super.close(); } //method for adding a contact to the database public void addContact(Contact contact) { sqliteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); //put all the appropriate edit text fields contact and store them in the database. values.put(FIRST_NAME,contact.getFirstName()); values.put(LAST_NAME,contact.getLastName()); values.put(NUMBER,contact.getNumber()); values.put(NUMBER_TYPE,contact.getNumberType()); values.put(EMAIL,contact.getEmail()); values.put(EMAIL_TYPE,contact.getEmailType()); values.put(ADDRESS,contact.getAddress()); values.put(ADDRESS_TYPE,contact.getAddressType()); values.put(DATE,contact.getDate()); values.put(DATE_TYPE,contact.getDateType()); values.put(FAVOURITE,"false"); db.insert(TABLE_CONTACT,values); db.close(); // Closing database connection } // Deleting single contact public void deleteContact(String firstName,String lastName) { sqliteDatabase db = this.getWritableDatabase(); db.delete(TABLE_CONTACT,FIRST_NAME + "=? AND " + LAST_NAME + "=?",new String[] {firstName,lastName}); db.close(); } //this method is used for editing a contact public int updateContact(Contact contact,String firstName,String lastName) { sqliteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); //we first find the existing contact,and overwrite the old //values with the new values values.put(FIRST_NAME,contact.getLastName()); values.put(NUMBER,contact.getFavourite()); // updating row return db.update(TABLE_CONTACT,values,lastName}); } public List<Contact> getFavouriteContacts() { List<Contact> contactList = new ArrayList<Contact>(); String isFavourite = "true"; // Select All Query String selectQuery = "SELECT * FROM " + TABLE_CONTACT + " WHERE " + FAVOURITE + "='" + isFavourite + "'"; sqliteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(selectQuery,null); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { Contact contact = new Contact(cursor.getString(0),cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6),cursor.getString(7),cursor.getString(8),cursor.getString(9),cursor.getString(11)); // Adding contact to list contactList.add(contact); } while (cursor.moveToNext()); } return contactList; } public Contact getContact(String firstName,String lastName) { List<Contact> contactList = new ArrayList<Contact>(); // Select All Query String selectQuery = "SELECT * FROM " + TABLE_CONTACT + " WHERE " + FIRST_NAME + "='" + firstName + "' AND " + LAST_NAME + "='" + lastName + "'"; sqliteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(selectQuery,cursor.getString(11)); // Adding contact to list contactList.add(contact); } while (cursor.moveToNext()); } return contactList.get(0); } public List<Contact> getContacts(String order) { List<Contact> contactList = new ArrayList<Contact>(); // Select All Query //this bottom line is used to change the sorting order of the contact list String selectQuery = "SELECT * FROM " + TABLE_CONTACT +" ORDER BY " + order; sqliteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(selectQuery,cursor.getString(11)); // Adding contact to list contactList.add(contact); } while (cursor.moveToNext()); } return contactList; } @Override public void onCreate(sqliteDatabase arg0) { // TODO Auto-generated method stub } @Override public void onUpgrade(sqliteDatabase arg0,int arg1,int arg2) { // TODO Auto-generated method stub } }

任何帮助,将不胜感激.提前致谢!

解决方法

原文链接:https://www.f2er.com/mssql/83749.html

猜你在找的MsSQL相关文章