Uri
wstawić obraz do SQLite
za pomocą poniższego kodu:EditText afterTextChanged nie działa
Register
private void insertData(String name,String pass, Uri image) throws SQLiteException {
database = mdb.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(MyDatabaseHelper.KEY_NAME, name);
cv.put(MyDatabaseHelper.KEY_PASSWORD, pass);
try {
database = mdb.getWritableDatabase();
InputStream iStream = getContentResolver().openInputStream(image);
byte[] inputData = Utils.getBytes(iStream);
cv.put(MyDatabaseHelper.KEY_IMAGE,inputData);
}catch(IOException ioe)
{
Log.e(TAG, "<saveImageInDB> Error : " + ioe.getLocalizedMessage());
}
database.insert(MyDatabaseHelper.TABLE_USER, null, cv);
Toast.makeText(getApplicationContext(),"Database Created",Toast.LENGTH_SHORT).show();
database.close();
}
Jak się Database Created
, zakładam, że baza danych została pomyślnie utworzony, a dane zostały wprowadzone.
W Zaloguj się, chcę obraz pobrany z SQLite
na podstawie nazwy użytkownika.
name = (EditText) findViewById(R.id.name);
name.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable editable) {
String personName = name.getText().toString();
database = mdb.getWritableDatabase();
String selectQuery = " SELECT " + MyDatabaseHelper.KEY_IMAGE + " FROM " + MyDatabaseHelper.TABLE_USER + " WHERE " + MyDatabaseHelper.KEY_NAME + " = ' " + personName + " ' ";
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
byte[] blob = cursor.getBlob(cursor.getColumnIndex("Image"));
Log.e("A", blob+"");
cursor.close();
mdb.close();
imageView.setImageBitmap(getRoundedBitmap(Utils.getImage(blob)));
}
else
{
Toast.makeText(getApplication(),"NULL",Toast.LENGTH_SHORT).show();
}
}
});
public Bitmap getRoundedBitmap(Bitmap bitmap){
Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Paint paint = new Paint();
paint.setShader(shader);
paint.setAntiAlias(true);
Canvas c = new Canvas(circleBitmap);
c.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2, paint);
return circleBitmap;
}
MyDatabaseHelper
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final int DATABASE_VERSION=1;
public static final String DATABASE_NAME="mm.db";
public static final String TABLE_USER="User";
public static final String KEY_NAME="Name";
public static final String KEY_PASSWORD="Password";
public static final String KEY_IMAGE="Image";
public static final String ID="id";
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_USER + " (" + ID + " INTEGER PRIMARY KEY ,Name TEXT,Password TEXT,Image BLOB)");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion,int newVersion) {
Log.w(MyDatabaseHelper.class.getName(), "Upgrading database from version" + oldVersion + "to" + newVersion + ",which will destroy all old data");
db.execSQL("Drop TABLE IF EXISTS " + TABLE_USER);
onCreate(db);
}
public MyDatabaseHelper(Context context)
{
super(context, DATABASE_NAME,null,1);
}
}
Utils
public class Utils {
public static byte[] getImageBytes(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
return stream.toByteArray();
}
public static Bitmap getImage(byte[] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
public static byte[] getBytes(InputStream inputStream) throws IOException {
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
return byteBuffer.toByteArray();
}
}
Po użytkownik wpisać jego/jej imię na EditText
, który nazwany name
, obraz nie pobierania, ale wyświetlanie Null
wiadomość do mnie! Co jest nie tak?
Zapoznaj się z tym http://stackoverflow.com/questions/11790104/how-to-storebitmap-image-and-retrieve-image-from-sqlite-database-in-android –
Uaktywnia się moduł nasłuchiwania obserwatora tekstu zdarzenie afterTextChanged w każdej zmianie tekstu edycji. W twoim przypadku możesz wywoływać wybrane zdanie wiele razy (z personName = 'u', personName = 'us' ...). – Guille89
Jaki jest prawidłowy sposób wdrożenia tego? –