从数据库插入/检索图像

时间:2012-10-12 14:52:24

标签: android image insert

如何解决这些问题?

我不知道下一步是什么。

我解决了这些问题,但你不知道它不起作用

main.xml

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/="vertical"  ="fill_parent"  

android:layout_height="fill_parent"  

android:background="#DCDCDC">  

<TextView    

android:layout_width="fill_parent"   

android:layout_height="wrap_content"   

android:text="welcome"  

android:textColor="#000000"  

/>  

<ImageView   

android:id="@+id/img"  

android:layout_width="wrap_content"   

android:layout_height="wrap_content"  

android:background="@drawable/icon"  

/>  

<Button   

android:id="@+id/btn_submit"  

android:text="Submit"  

android:layout_width="wrap_content"   

android:layout_height="wrap_content"/>  

<ImageView   

android:id="@+id/img2"  

android:layout_width="wrap_content"   

android:layout_height="wrap_content"  

android:background="@drawable/icon"/>  

<Button   

android:id="@+id/btn_retrieve"  

android:text="Retrieve"  

android:layout_width="wrap_content"   

android:layout_height="wrap_content"/>  

</LinearLayout>  

CommonClass.java

package com.example.demomediaproject;

import android.app.Application;  

public class CommonClass extends Application{  

byte[] profileImageInBytes;  




}  

DatabaseMethods.java

package com.example.demomediaproject;  


import android.content.Context;  

import android.database.Cursor;  


import android.database.SQLException;  

import android.database.sqlite.SQLiteDatabase;  

import android.database.sqlite.SQLiteOpenHelper;  



public class DatabaseMethods {  

private static final String databaseName = "DemoDb";  

private static final int databaseVersion = 1;  

private static final String projectCustomProfiles =  

"CREATE TABLE IF NOT EXISTS PROJECT_CUSTOM_PROFILES (PROFILE_IMAGE VARBINARY(MAX));";  

private final Context context;   

private DatabaseHelper DBHelper;  

private SQLiteDatabase db;  

Cursor cursor;  

int count;  

boolean isProjectNamePresent=false;  

boolean isProfileNamePresent = false;  



public DatabaseMethods(Context ctx)   

{  

this.context = ctx;  

DBHelper = new DatabaseHelper(context);  

}  




private static class DatabaseHelper extends SQLiteOpenHelper   

{  

public DatabaseHelper(Context context)   


{  

super(context, databaseName, null, databaseVersion);  

}  

@Override  

public void onCreate(SQLiteDatabase db)   

{  

db.execSQL(projectCustomProfiles);  

}  




@Override  

public void onUpgrade(SQLiteDatabase db, int oldVersion,int newVersion)   

{  

db.execSQL("DROP TABLE IF EXISTS PROJECT_CUSTOM_PROFILES");  

onCreate(db);  

}  

}      



//---opens the database---  

public DatabaseMethods open() throws SQLException   

{     

db = DBHelper.getWritableDatabase();  

return this;  

}  



//---closes the database---      

public void close()   

{  

DBHelper.close();  

}  




public void storeCustomProfiles(byte[] imgData)  


{  

String query;  

query = "INSERT OR REPLACE INTO PROJECT_CUSTOM_PROFILES (PROFILE_IMAGE) 
VALUES('"+imgData+"')";

db.execSQL(query);  


    }  

public Cursor fetchProfileImageFromDatabase()  

{  


return  db.rawQuery("SELECT PROFILE_IMAGE FROM PROJECT_CUSTOM_PROFILES " , null);  

}  


public int getCountForCustomProfiles()  

{  

cursor= db.rawQuery("SELECT COUNT(PROFILE_IMAGE) FROM PROJECT_CUSTOM_PROFILES",null);  

if(cursor.moveToFirst())  

{  

count= cursor.getInt(0);  

}  


cursor.close();  

return count;  

}  

}  

DemomediaprojectActivity.java

package com.example.demomediaproject;  

import java.io.ByteArrayInputStream;  

import java.io.ByteArrayOutputStream;  




import android.app.Activity;  

import android.app.AlertDialog;  

import android.content.DialogInterface;  

import android.content.Intent;  

import android.database.Cursor;  

import android.graphics.Bitmap;  

import android.graphics.Bitmap.CompressFormat;  

import android.graphics.BitmapFactory;  

import android.net.Uri;  


import android.os.Bundle;  

import android.provider.MediaStore.MediaColumns;  

import android.view.View;  

import android.view.View.OnClickListener;  


import android.widget.Button;  

import android.widget.ImageView;  



public class DemomediaprojectActivity extends Activity implements OnClickListener {  

ImageView pic,pic1;  

Button submitButton,retrieveButton;  

private static final int CAMERA_PIC_REQUEST = 1337;   

private static final int SELECT_PICTURE = 1;  

String fileManagerString,imagePath;  

String selectedImagePath="";  

int columnIndex;  

CommonClass commClass;  

/** Called when the activity is first created. */  


@Override  

public void onCreate(Bundle savedInstanceState) {  

super.onCreate(savedInstanceState);  

setContentView(R.layout.main);  

pic=(ImageView)findViewById(R.id.img);  

pic.setOnClickListener(this);  

pic1=(ImageView)findViewById(R.id.img2);  

submitButton=(Button)findViewById(R.id.btn_submit);  

submitButton.setOnClickListener(this);  

retrieveButton=(Button)findViewById(R.id.btn_retrieve);  

retrieveButton.setOnClickListener(this);  

commClass = ((CommonClass) getApplicationContext());  

DatabaseMethods db=new DatabaseMethods(this);  

db.open();  

}  

@Override  

public void onClick(View arg0)  

{DatabaseMethods db=new DatabaseMethods(this);  

// TODO Auto-generated method stub  

switch (arg0.getId())  

{  

case R.id.img:  

showalert();  

break;  

case R.id.btn_submit:  

db.open();  

db.storeCustomProfiles(commClass.profileImageInBytes);  

db.close();  

break;  

case R.id.btn_retrieve:  

db.open();  

Cursor cursor = db.fetchProfileImageFromDatabase();  

if(cursor != null)  

{  

if(cursor.moveToFirst())  

{  

do  

{  

//byte[] data = cursor.getBlob(cursor.getColumnIndex("PROFILE_IMAGE"));  

//pic1.setImageBitmap(BitmapFactory.decodeByteArray(data, 0, data.length));  

//String temp=cursor.getBlob(cursor.getColumnIndex("PROFILE_IMAGE")).toString();  

//byte[] data=temp.getBytes();  

//pic1.setImageBitmap(BitmapFactory.decodeByteArray(data, 0, data.length));  

byte[] data = cursor.getBlob(cursor.getColumnIndex("PROFILE_IMAGE"));  

ByteArrayInputStream imageStream = new ByteArrayInputStream(data);  

Bitmap theImage = BitmapFactory.decodeStream(imageStream);  

// pic1.setImageBitmap(theImage);  

}  

while(cursor.moveToNext());  

}  

cursor.close();  

}  

db.close();  

break;  

default:  

break;  

}  

}

/*private byte[] getBitmapAsByteArray(Bitmap theImage) 

{ 

// TODO Auto-generated method stub 

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 

// Middle value is quality, but PNG is lossless, so it's ignored. 

theImage.compress(CompressFormat.PNG, 0, outputStream); 

return outputStream.toByteArray(); 

}*/  

private void showalert()  

{  

 // TODO Auto-generated method stub  

AlertDialog.Builder builder = new AlertDialog.Builder(this);  

builder.setTitle("Select Photo Source")  

.setMessage("Select Pictures From Media Library")  

.setCancelable(false)  

.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {  

public void onClick(DialogInterface dialog, int id) {  

}  

})  

.setNeutralButton("Select Picture", new DialogInterface.OnClickListener() {  

public void onClick(DialogInterface dialog, int id1) {  

Intent intent = new Intent();  

intent.setType("image/*");  

intent.setAction(Intent.ACTION_GET_CONTENT);  

startActivityForResult(Intent.createChooser(intent, "select picture"), SELECT_PICTURE);   

}  

})  

.setNegativeButton("New", new DialogInterface.OnClickListener() {  

//camera function call  

public void onClick(DialogInterface dialog, int id2) {  

// TODO Auto-generated method stub  

Intent intentCamera  = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);  

startActivityForResult(intentCamera,CAMERA_PIC_REQUEST);  

 }  

});  

AlertDialog alert = builder.create();  

alert.show();  

}  

public void onActivityResult(int requestCode, int resultCode, Intent data)   

{  if (resultCode == Activity.RESULT_OK)  

{   if(requestCode == SELECT_PICTURE)   

{  

Uri selectedImageUri = data.getData();  

//OI FILE Manager  

fileManagerString = selectedImageUri.getPath();  

//MEDIA GALLERY  

selectedImagePath =getPath(selectedImageUri);  

pic.setImageURI(selectedImageUri);  

imagePath.getBytes();  

}  

if(requestCode == CAMERA_PIC_REQUEST)  

{  

Bitmap image = (Bitmap) data.getExtras().get("data");  

ByteArrayOutputStream stream = new ByteArrayOutputStream();  

 image.compress(Bitmap.CompressFormat.JPEG, 100, stream);  

CommonClass commClass = ((CommonClass)getApplicationContext());  

 commClass.profileImageInBytes = stream.toByteArray();  

pic.setImageBitmap(BitmapFactory.decodeByteArray(commClass.profileImageInBytes, 0, 
commClass.profileImageInBytes.length));  
}  
}  
}  
private String getPath(Uri uri)  
{  

// TODO Auto-generated method stub  

String[] projection = { MediaColumns.DATA };  

Cursor cursor = managedQuery(uri, projection, null, null, null);  

columnIndex = cursor.getColumnIndexOrThrow(MediaColumns.DATA);  

 cursor.moveToFirst();  

imagePath = cursor.getString(columnIndex);  

return cursor.getString(columnIndex);  

}  



}  

1 个答案:

答案 0 :(得分:1)

https://github.com/nostra13/Android-Universal-Image-Loader

使用此加载程序通过延迟加载下载图像,然后根据以前的sqlite演示将位图数据添加到数据库中