Я нахожусь внутри фрагмента, и у меня есть CircleImageView, для которого я установил изображение в xml по умолчанию, используя android:src="@drawable/default_profile_image"
.
Пользователь может решить, загружать ли другое изображение, и я делаю это, запустив намерение, которое открывает галерею, и в onActivityResult()
я загружаю изображение следующим образом:
if(requestCode==0 && resultCode == Activity.RESULT_OK) {
Uri path = data.getData();
Bitmap photo = null;
try {
photo = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), path);
} catch (IOException e) {
e.printStackTrace();
}
if(photo != null)
mProfilePhoto.setImageBitmap(photo);
}
Теперь, независимо от того, загрузил ли пользователь другое изображение или оставил изображение по умолчанию, я хотел бы сохранить его в базе данных, а затем взять его.
У меня уже есть метод, который правильно берет имя из базы данных.
private void getUserInformation(){
Cursor data = databaseHelper.getUserInformation();
if(data.moveToFirst()) {
//this crash
Bitmap bitmap = BitmapFactory.decodeByteArray(data.getBlob(2), 0, data.getBlob(2).length);
if(bitmap != null)
mProfilePhoto.setImageBitmap(bitmap);*/
mProfileName = data.getString(1);
}
data.close();
}
Это то, что у меня на данный момент не работает
метод onclick внутри фрагмента
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.saveProfileButton:
//need to pass a bitmap insted of null
addUserInformation(name,null);
break;
case R.id.profile_photo:
Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
try {
startActivityForResult(
Intent.createChooser(i, "Select Picture"), 0);
}catch (ActivityNotFoundException ex){
ex.printStackTrace();
}
break;
}
}
private void addUserInformation(String username, Bitmap profile_pic){
boolean b = databaseHelper.addUserInformation(username, profile_pic);
if(b) {
toastMessage("Update Success");
}
else
toastMessage("Update Failed");
}
DatabaseHelper класс
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "userinfo";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME1 = "USER_INFORMATION";
public DatabaseHelper(Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table "+TABLE_NAME1+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, USERNAME TEXT, PICTURE BLOB)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME1);
onCreate(db);
}
public boolean addUserInformation(String username, Bitmap picture){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("USERNAME", username);
byte[] data = getBitmapAsByteArray(picture);
values.put("PICTURE", data);
long id = db.insert(TABLE_NAME1, null, values);
db.close();
if(id == -1)
return false;
else
return true;
}
private static byte[] getBitmapAsByteArray(Bitmap bitmap) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, outputStream);
return outputStream.toByteArray();
}
}