Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.90
Sherstyuk_Ya_N
4 / 4 / 0
Регистрация: 22.07.2013
Сообщений: 30
#1

Сохранение фото в базу данных - Программирование Android

25.07.2013, 11:53. Просмотров 3005. Ответов 19
Метки нет (Все метки)

Ребят помогите пожалуйста !
Суть такова есть Activity в ней EditText, ImageButton, Button и база данных. Как в ImageButton загонять фото с галереи сделать, а вот как её сохранить в базу данных и загрузить от туда не знаю. За ранее спасибо

Так загружаю фото в ImageButton

//====== Добавление фото ребёнка
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public void FotoProfil_Click (View v){
 
        Image_profil = (ImageButton) findViewById(R.id.Image_profil_id);
        Intent i = new Intent(Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        i.putExtra("crop", "true");
        i.putExtra("aspectX", 1);
        i.putExtra("aspectY", 1);
        i.putExtra("outputX", 150);// ---- размер фото на кнопке
        i.putExtra("outputY", 150);// ---- размер фото на кнопке
        i.putExtra("scale", true);
        i.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
        i.putExtra("noFaceDetection", false); 
        i.putExtra("return-data", false);
        i.putExtra(MediaStore.EXTRA_OUTPUT, ContactPhotoHelper.getTempUri());
        startActivityForResult(i, REQ_CODE_PICK_IMAGE);
        
    
    } 
    
    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
 
        switch (requestCode) {
        case REQ_CODE_PICK_IMAGE:
            if (resultCode == RESULT_OK) {
                contactPhoto = BitmapFactory.decodeFile(ContactPhotoHelper.getTempFile()
                        .getAbsolutePath());
                Image_profil.setImageBitmap(contactPhoto);
            }
        }
    }
***********************************************
Клас для работы с фото

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package syn.child;
 
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
 
 
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.util.Log;
 
public class ContactPhotoHelper {
 
    private static final String TEMP_PHOTO_FILE = "tempPhoto.jpg";
 
    public static Uri getTempUri() {
        return Uri.fromFile(getTempFile());
    }
 
    public static File getTempFile() {
        if (isSDCARDMounted()) {
 
            File f = new File(Environment.getExternalStorageDirectory(), TEMP_PHOTO_FILE);
            try {
                f.createNewFile();
            } catch (IOException e) {
                Log.e("ContactPhotoHelper.getTempFile", "Error while saving temp photo: " + e.getMessage());
            }
            return f;
        } else {
            return null;
        }
    }
 
    public static boolean isSDCARDMounted() {
        String status = Environment.getExternalStorageState();
 
        if (status.equals(Environment.MEDIA_MOUNTED))
            return true;
        return false;
    }
 
    public static void setContactPhoto(ContentResolver c, byte[] bytes, long personId) {
        int photoRow = -1;
        String where = Data.RAW_CONTACT_ID + " = " + personId + " AND "
                + Data.MIMETYPE + "=='" + Photo.CONTENT_ITEM_TYPE
                + "'";
        Cursor cursor = c.query(Data.CONTENT_URI, null, where, null, null);
        int idIdx = cursor.getColumnIndexOrThrow(Data._ID);
        if (cursor.moveToFirst()) {
            photoRow = cursor.getInt(idIdx);
        }
        cursor.close();
 
        ContentValues values = new ContentValues();
        values.put(Data.RAW_CONTACT_ID, personId);
        values.put(Data.IS_SUPER_PRIMARY, 1);
        values.put(Photo.PHOTO, bytes);
        values.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
 
        if (photoRow >= 0) {
            c.update(Data.CONTENT_URI, values, Data._ID + " = " + photoRow, null);
        } else {
            c.insert(Data.CONTENT_URI, values);
        }
    }
 
    public static Bitmap loadContactPhoto(ContentResolver cr, long id, Context context) {
        Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
        InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
        if (input == null) {
            Resources res = context.getResources();
            return BitmapFactory.decodeResource(res, R.drawable.foto_profil);
        }
        return BitmapFactory.decodeStream(input);
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2013, 11:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сохранение фото в базу данных (Программирование Android):

Сохранение фото на телефон - Программирование Android
Народ, какая то фигня случилась, в общем делаю приложение, программа фоткает в фоне дефолтной камерой. Все вроде бы ок, тестировал на nexus...

Camera, сохранение пути к фото - Программирование Android
Как получить полный путь к фото, сделанного камерой? @Override public void onClick(View v) { try { // Намерение для...

Реализовать распознавание текста на фото и его сохранение - Программирование Android
Доброго времени суток! В своей профессиональной деятельности столкнулся с тем, что периодически приходится переписывать модели и...

Сохранение и восстановление позиции фото при перемещении через ObjectAnimator до и после паузы - Программирование Android
Дано - ObjectAnimator, imageView. ImageView с фотографией должен переместится с левого края до правого. ObjectAnimator начинает свое...

Сохранение текста из Spinner а в базу SQLite - Программирование Android
Уважаемые гуру, прошу помощи. Имеется несколько данные (массив) в Spinner е и кнопка. При нажатии кнопки данные из Spinnera должны...

Связать базу данных - Программирование Android
Добрый вечер! Объясните пожалуйста новичку, как связать веб-сервер с андроид-приложением? (На сервере я управляю базой данных, содержимое...

19
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
25.07.2013, 15:35 #2
смотрите раз Загрузка картинки на сервер
смотрите два Функция для загрузки файла на сервер
смотрите три http://android-er.blogspot.ru/2011/0...-build-in.html
0
Sherstyuk_Ya_N
4 / 4 / 0
Регистрация: 22.07.2013
Сообщений: 30
25.07.2013, 16:29  [ТС] #3
Да разобрался как сделать, но есть одно но это ссылка на фото, а как мне запихнуть это изображение в базу данных
Вот код моей реализации
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent i = new Intent(Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                i.putExtra("crop", "true");
                i.putExtra("aspectX", 1);
                i.putExtra("aspectY", 1);
                i.putExtra("outputX", 150);// ---- размер фото на кнопке
                i.putExtra("outputY", 150);// ---- размер фото на кнопке
                i.putExtra("scale", true);
                i.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
                i.putExtra("noFaceDetection", false); 
                i.putExtra("return-data", false);
                i.putExtra(MediaStore.EXTRA_OUTPUT, ContactPhotoHelper.getTempUri());
                startActivityForResult(i, REQ_CODE_PICK_IMAGE);
            }});
        
    }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
 
        switch (requestCode) {
        case REQ_CODE_PICK_IMAGE:
            if (resultCode == RESULT_OK) {
               
                textTargetUri.setText(ContactPhotoHelper.getTempFile()
                        .getAbsolutePath());
            }
        }
0
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
25.07.2013, 16:32 #4
отправляете пост запрос серверу ( в теле которого содержится фотка), а на сервере (например с помощью php) сохраняешь фотку в бд
т.к. нормально настроенный сервер не должен позволять ковыряться в бд из вне
0
Sherstyuk_Ya_N
4 / 4 / 0
Регистрация: 22.07.2013
Сообщений: 30
25.07.2013, 16:35  [ТС] #5
У меня база данных локальная (находитса на устройстве)
0
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
25.07.2013, 16:35 #6
о..,тогда не знаю
0
Sherstyuk_Ya_N
4 / 4 / 0
Регистрация: 22.07.2013
Сообщений: 30
25.07.2013, 16:37  [ТС] #7
А можешь обьяснить про облачную базу данных и как её сделать. Если можно в личку
0
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
25.07.2013, 16:38 #8
не, про облачную не могу) не работал с такими
0
Sherstyuk_Ya_N
4 / 4 / 0
Регистрация: 22.07.2013
Сообщений: 30
25.07.2013, 18:46  [ТС] #9
И ещё один момент в моём классе работой с обрезкой ContactPhotoHelper есть строка private static final String TEMP_PHOTO_FILE = "tempPhoto.jpg"; короче проблема как название временной фотки задавать самому, например в EditText другой активности

Добавлено через 1 час 28 минут
Ау люди подскажите как фото сохранить в базе данных
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.07.2013, 21:04 #10
Java
1
2
3
4
5
6
7
8
9
Bitmap photo = <Your image>
ByteArrayOutputStream bos = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.PNG, 100, bos);
byte[] bArray = bos.toByteArray();
 
db = YourDBHelper.getInstance(ctx).getWritableDatabase();    
ContentValues values = new ContentValues();         
values.put("image", bArray);            
db.insert(TABLE_NAME , null, values);
Java
1
2
3
4
5
6
7
8
9
10
protected long saveBitmap(SQLiteDatabase database, Bitmap bmp)
{
    int size = bmp.getRowBytes() * bmp.getHeight(); 
    ByteBuffer b = ByteBuffer.allocate(size); bmp.copyPixelsToBuffer(b); 
    byte[] bytes = new byte[size];
    b.get(bytes, 0, bytes.length);
    ContentValues cv=new ContentValues();
    cv.put(CHUNK, bytes);
    this.id= database.insert(TABLE, null, cv);
}
Java
1
2
3
4
5
6
7
8
9
CREATE TABLE " + DB_TABLE + "("+ 
                   KEY_NAME + " TEXT," + 
                   KEY_IMAGE + " BLOB);;
public void addEntry( String name, byte[] image) throws SQLiteException{
    ContentValues cv = new  ContentValues();
    cv.put(KEY_NAME,    name);
    cv.put(KEY_IMAGE,   image);
    database.insert( DB_TABLE, null, cv );
}
0
Sherstyuk_Ya_N
4 / 4 / 0
Регистрация: 22.07.2013
Сообщений: 30
26.07.2013, 00:32  [ТС] #11
Я извиняюсь, Вы бы не могли прокоментировать
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.07.2013, 01:54 #12
битмап превращаем в массив байт и записываем в базу методом insert.
0
Sherstyuk_Ya_N
4 / 4 / 0
Регистрация: 22.07.2013
Сообщений: 30
26.07.2013, 01:57  [ТС] #13
Накавырял вот код

//******** ЗАПИСЬ **********

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void insertImg(int id , Bitmap img ) {   
 
 
    byte[] data = getBitmapAsByteArray(img); // this is a function
 
    insertStatement_logo.bindLong(1, id);       
    insertStatement_logo.bindBlob(2, data);
 
    insertStatement_logo.executeInsert();
    insertStatement_logo.clearBindings() ;
 
}
 
 public static byte[] getBitmapAsByteArray(Bitmap bitmap) {
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    bitmap.compress(CompressFormat.PNG, 0, outputStream);       
    return outputStream.toByteArray();
}
//******* ЧТЕНИЕ ***********

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public Bitmap getImage(int i){
 
    String qu = "select img  from table where feedid=" + i ;
    Cursor cur = db.rawQuery(qu, null);
 
    if (cur.moveToFirst()){
        byte[] imgByte = cur.getBlob(0);
        cur.close();
        return BitmapFactory.decodeByteArray(imgByte, 0, imgByte.length);
    }
    if (cur != null && !cur.isClosed()) {
        cur.close();
    }       
 
    return null ;
}

Только не могу понять что такое insertStatement_logo
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.07.2013, 12:24 #14
Цитата Сообщение от Sherstyuk_Ya_N Посмотреть сообщение
Только не могу понять что такое insertStatement_logo
SQLiteStatement
0
Sherstyuk_Ya_N
4 / 4 / 0
Регистрация: 22.07.2013
Сообщений: 30
27.07.2013, 21:10  [ТС] #15
Поясните что это такое
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2013, 21:10
Привет! Вот еще темы с ответами:

Сохранение данных - Программирование Android
Знаю, знаю что тема заезженная вдоль и поперек но всё таки задам вопрос, может поможете. Проблема в том, что в моем приложении...

Сохранение данных - Программирование Android
Беру JSON из интернета и делаю блоки с текстом и картинками. При скачивании данных сохраняю строку в БД. Как быть с картинками?

Связать базу данных с RecyclerView - Программирование Android
Здравствуйте уважаемые форумчане! Прошу вашей помощи! У меня есть фрагмент с RecyclerView Код: package com.starikov.tester; ...

Создать базу данных на sdcard - Программирование Android
Здравствуйте! не как не могу создать базу на карточке Файл DataBaseHelper.java: package com.example.test; import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
27.07.2013, 21:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru