samedi 23 avril 2016

SQLite BLOB Image pass with insert statement

im beginner in SQLite nd Android program, i have question about Blob that stored in SQLite

im done read this.. SQLite - Is it possible to insert a BLOB via insert statement?

and other example about sqite inserting Blob image via ContentValues cv and something like that

i have code like this...

public class SettingProfile extends AppCompatActivity {
CircleImageView profileImage;
SQLHelper dbhelper;

private static int RESULT_LOAD_IMG = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
    setContentView(R.layout.setting_profile);


    profileImage = (CircleImageView) findViewById(R.id.startchats);
dbhelper=new SQLHelper(this);
    readFromDB();

profileImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent galleryIntent = new Intent(Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            // Start the Intent
            startActivityForResult(galleryIntent, RESULT_LOAD_IMG);
        }
    });
}
 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {
        // When an Image is picked
        if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK
                && null != data) {
            // Get the Image from data

            Uri selectedImageUri = data.getData();
            selectedImagePath = getPath(selectedImageUri);
            System.out.println("Image Path : " + selectedImagePath);
            profileImage.setImageURI(selectedImageUri);

            saveInDB();

        } else {
            Toast.makeText(this, "You haven't picked Image",
                    Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
                .show();
    }

}

@SuppressWarnings("deprecation")
public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

 void saveInDB() {
    byte[] byteImage1 = null;
    SQLiteDatabase db = dbhelper.getWritableDatabase();
    try {
        FileInputStream instream = new FileInputStream(selectedImagePath);
        BufferedInputStream bif = new BufferedInputStream(instream);
        byteImage1 = new byte[bif.available()];
        bif.read(byteImage1);

        db.execSQL("UPDATE `users` SET profil='"+byteImage1+"'");
        db.close();
        Toast.makeText(SettingProfile.this, "Foto Profile Berhasil Diperbaharui", Toast.LENGTH_SHORT).show();

    }
   catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }


}
void readFromDB() {
    byte[] byteImage2 = null;
    SQLiteDatabase db = dbhelper.getWritableDatabase();
    Cursor cur = db.rawQuery("SELECT * FROM users",null);
    cur.moveToFirst();

    byteImage2 = cur.getBlob(cur.getColumnIndex("profil"));
    setImage(byteImage2);
    cur.close();
    db.close();
}
void setImage(byte[] byteImage2) {

    profileImage.setImageBitmap(BitmapFactory.decodeByteArray(byteImage2, 0,
            byteImage2.length));

}

the question is , why i can store it to SQLite database but always returning Decode returning null,,...

or SQLite "must" using ContentValues??

thanks for your answer,..

Aucun commentaire:

Enregistrer un commentaire