Сохранение картинки с камеры и ее извлечение
02.12.2019, 16:41. Показов 752. Ответов 3
Добрый день форумчане, нужно решить вопрос по сохранению изображения из imgview, полученного из камеры и его сохранения в sqlite, а в последующем извлечении из базы и выводу в listview
Регистрация карточки ActivityReg.java
| 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
| package com.example.bandit;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.FileProvider;
import androidx.appcompat.widget.Toolbar;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ActivityReg extends AppCompatActivity {
private static int TAKE_PICTURE_REQUEST = 1;
private String mCurrentPhotoPath;
private EditText txtName;
private EditText txtOpis;
private ImageView imgFace;
private Button btnSave;
private Uri photoURI;
DatabaseHelper databaseHelper;
SQLiteDatabase db;
Cursor userCursor;
SimpleCursorAdapter userAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reg);
databaseHelper = new DatabaseHelper(this);
// создаем базу данных
try {
databaseHelper.updateDataBase();
} catch (IOException ioe) {
throw new Error("Не возможно инициализировать базу данных");
}
try {
db = databaseHelper.getWritableDatabase();
} catch (SQLException sqle) {
throw sqle;
}
txtName = (EditText) findViewById(R.id.txtName);
txtOpis = (EditText) findViewById(R.id.txtOpis);
imgFace = (ImageView) findViewById(R.id.imgFace);
btnSave = (Button) findViewById(R.id.btnSave);
imgFace.setVisibility(View.GONE);
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
save();
}
});
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(ActivityReg.this, BanditActivity.class);
startActivity(intent);
}
});
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dispatchTakePictureIntent();
imgFace.setVisibility(View.VISIBLE);
}
});
}
public void save () {
Bitmap img = ((BitmapDrawable)imgFace.getDrawable()).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
img.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bArray = stream.toByteArray();
db = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(databaseHelper.COLUMN_PICTURE, bArray);
cv.put(databaseHelper.COLUMN_NAME, txtName.getText().toString());
cv.put(databaseHelper.COLUMN_INFO, txtOpis.getText().toString());
try {
db.insert(databaseHelper.TABLE, null, cv);
} catch (Exception e) {
e.printStackTrace();
}
db.close();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == TAKE_PICTURE_REQUEST && resultCode == RESULT_OK) {
imgFace.setImageURI(photoURI);
}
}
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "BMP_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".bmp", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = image.getAbsolutePath();
return image;
}
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
Toast.makeText(this, "Error!", Toast.LENGTH_SHORT).show();
}
// Continue only if the File was successfully created
if (photoFile != null) {
photoURI = FileProvider.getUriForFile(this,
"com.example.bandit.myUniquefileprovider",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, TAKE_PICTURE_REQUEST);
}
}
}
} |
|
Вывод значений в listview BanditActivity.java
| 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
| package com.example.bandit;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.FilterQueryProvider;
import android.text.Editable;
import android.text.TextWatcher;
import java.io.IOException;
public class BanditActivity extends AppCompatActivity {
private ImageView imgPhoto;
private TextView txtName;
private TextView txtOpis;
private TextView header;
private EditText txtsearch;
ListView userList;
DatabaseHelper databaseHelper;
SQLiteDatabase db;
Cursor userCursor;
SimpleCursorAdapter userAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bandit);
databaseHelper = new DatabaseHelper(this);
// создаем базу данных
try {
databaseHelper.updateDataBase();
} catch (IOException ioe) {
throw new Error("Не возможно инициализировать базу данных");
}
try {
db = databaseHelper.getWritableDatabase();
} catch (SQLException sqle) {
throw sqle;
}
imgPhoto = (ImageView) findViewById(R.id.imgPhoto);
txtName = (TextView) findViewById(R.id.txtName);
txtOpis = (TextView) findViewById(R.id.txtOpis);
userList = (ListView) findViewById(R.id.userList);
header = (TextView) findViewById(R.id.header);
txtsearch = (EditText) findViewById(R.id.txtsearch);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(BanditActivity.this, ActivityReg.class);
startActivity(intent);
}
});
}
@Override
public void onResume() {
super.onResume();
try{
// открываем подключение
db = databaseHelper.getWritableDatabase();
//получаем данные из бд в виде курсора
userCursor = db.rawQuery("select * from " + DatabaseHelper.TABLE, null);
// определяем, какие столбцы из курсора будут выводиться в ListView
String[] headers = new String[]{DatabaseHelper.COLUMN_NAME, DatabaseHelper.COLUMN_INFO, DatabaseHelper.COLUMN_PICTURE};
// создаем адаптер, передаем в него курсор
userAdapter = new SimpleCursorAdapter(this, R.layout.adapter_item,
userCursor, headers, new int[]{R.id.txtName, R.id.txtOpis, R.id.imgPhoto}, 0);
// если в текстовом поле есть текст, выполняем фильтрацию
if (!txtsearch.getText().toString().isEmpty())
userAdapter.getFilter().filter(txtsearch.getText().toString());
// установка слушателя изменения текста
txtsearch.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int count, int after) {
userAdapter.getFilter().filter(s.toString());
}
@Override
public void afterTextChanged(Editable s) {
userAdapter.getFilter().filter(s.toString());
}
});
// устанавливаем провайдер фильтрации
userAdapter.setFilterQueryProvider(new FilterQueryProvider() {
@Override
public Cursor runQuery(CharSequence constraint) {
if (constraint == null || constraint.length() == 0) {
return db.rawQuery("select * from " + DatabaseHelper.TABLE, null);
} else {
return db.rawQuery("select * from " + DatabaseHelper.TABLE + " where " +
DatabaseHelper.COLUMN_NAME + " like ?", new String[]{"%" + constraint.toString() + "%"});
}
}
});
header.setText("Количество элементов в базе: " + String.valueOf(userCursor.getCount()));
userAdapter.setViewBinder(new YourViewBinder());
userList.setAdapter(userAdapter);
}
catch (SQLException ex){}
}
//Подключение картинки в базу
public class YourViewBinder implements SimpleCursorAdapter.ViewBinder {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if (view.getId() == R.id.imgPhoto) {
ImageView iv = (ImageView) view;
//iv.setImageResource(R.drawable.kazakov);
try {
Bitmap bm = BitmapFactory.decodeStream(getAssets().open(cursor.getString(columnIndex)));
iv.setImageBitmap(bm);
} catch (IOException e) {
// e.printStackTrace();
byte[] imgByte = cursor.getBlob(4);
Bitmap bm = BitmapFactory.decodeByteArray(imgByte, 0, imgByte.length);
iv.setImageBitmap(bm);
}
return true;
}
return false;
}
}
@Override
public void onDestroy(){
super.onDestroy();
// Закрываем подключение и курсор
db.close();
userCursor.close();
}
} |
|
Сведения в базу данных вносятся, но при выводе, приложение рушится, при проходе строки, полученной вводом сведений, в том числе полученных из камеры
Я думаю ошибка в этом месте, но как ее исправить не имею понятия
| Java | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| //Подключение картинки в базу
public class YourViewBinder implements SimpleCursorAdapter.ViewBinder {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if (view.getId() == R.id.imgPhoto) {
ImageView iv = (ImageView) view;
//iv.setImageResource(R.drawable.kazakov);
try {
Bitmap bm = BitmapFactory.decodeStream(getAssets().open(cursor.getString(columnIndex)));
iv.setImageBitmap(bm);
} catch (IOException e) {
// e.printStackTrace();
byte[] imgByte = cursor.getBlob(4);
Bitmap bm = BitmapFactory.decodeByteArray(imgByte, 0, imgByte.length);
iv.setImageBitmap(bm);
}
return true;
}
return false;
}
} |
|
0
|