· 6 years ago · Jun 16, 2019, 12:10 PM
1package foodsqlitedemo.quocnguyen.com.foodsqlitedemo;
2
3import android.Manifest;
4import android.content.Intent;
5import android.content.pm.PackageManager;
6import android.graphics.Bitmap;
7import android.graphics.BitmapFactory;
8import android.graphics.drawable.BitmapDrawable;
9import android.net.Uri;
10import android.os.Bundle;
11import android.support.annotation.NonNull;
12import android.support.v4.app.ActivityCompat;
13import android.support.v7.app.AppCompatActivity;
14import android.view.View;
15import android.widget.Button;
16import android.widget.EditText;
17import android.widget.ImageView;
18import android.widget.Toast;
19
20import java.io.ByteArrayOutputStream;
21import java.io.FileNotFoundException;
22import java.io.InputStream;
23
24public class CrudActivity extends AppCompatActivity {
25
26 EditText edtName, edtPrice;
27 Button btnChoose, btnAdd, btnList;
28 ImageView imageView;
29
30 final int REQUEST_CODE_GALLERY = 999;
31
32 public static SQLiteHelper sqLiteHelper;
33
34 @Override
35 protected void onCreate(Bundle savedInstanceState) {
36 super.onCreate(savedInstanceState);
37 setContentView(R.layout.activity_crud);
38
39 init();
40
41 sqLiteHelper = new SQLiteHelper(this, "FoodDB.sqlite", null, 1);
42
43 sqLiteHelper.queryData("CREATE TABLE IF NOT EXISTS FOOD(Id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, price VARCHAR, image BLOB)");
44
45 btnChoose.setOnClickListener(new View.OnClickListener() {
46 @Override
47 public void onClick(View view) {
48 ActivityCompat.requestPermissions(
49 CrudActivity.this,
50 new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
51 REQUEST_CODE_GALLERY
52 );
53 }
54 });
55
56 btnAdd.setOnClickListener(new View.OnClickListener() {
57 @Override
58 public void onClick(View view) {
59 try{
60 sqLiteHelper.insertData(
61 edtName.getText().toString().trim(),
62 edtPrice.getText().toString().trim(),
63 imageViewToByte(imageView)
64 );
65 Toast.makeText(getApplicationContext(), "Added successfully!", Toast.LENGTH_SHORT).show();
66 edtName.setText("");
67 edtPrice.setText("");
68 imageView.setImageResource(R.mipmap.ic_launcher);
69 }
70 catch (Exception e){
71 e.printStackTrace();
72 }
73 }
74 });
75
76 btnList.setOnClickListener(new View.OnClickListener() {
77 @Override
78 public void onClick(View view) {
79 Intent intent = new Intent(CrudActivity.this, GudangList.class);
80 startActivity(intent);
81 }
82 });
83 }
84
85 public static byte[] imageViewToByte(ImageView image) {
86 Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
87 ByteArrayOutputStream stream = new ByteArrayOutputStream();
88 bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
89 byte[] byteArray = stream.toByteArray();
90 return byteArray;
91 }
92
93 @Override
94 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
95
96 if(requestCode == REQUEST_CODE_GALLERY){
97 if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
98 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
99 intent.setType("image/*");
100 startActivityForResult(intent, REQUEST_CODE_GALLERY);
101 }
102 else {
103 Toast.makeText(getApplicationContext(), "You don't have permission to access file location!", Toast.LENGTH_SHORT).show();
104 }
105 return;
106 }
107
108 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
109 }
110
111 @Override
112 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
113
114 if(requestCode == REQUEST_CODE_GALLERY && resultCode == RESULT_OK && data != null){
115 Uri uri = data.getData();
116
117 try {
118 InputStream inputStream = getContentResolver().openInputStream(uri);
119
120 Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
121 imageView.setImageBitmap(bitmap);
122
123 } catch (FileNotFoundException e) {
124 e.printStackTrace();
125 }
126 }
127
128 super.onActivityResult(requestCode, resultCode, data);
129 }
130
131 private void init(){
132 edtName = (EditText) findViewById(R.id.edtName);
133 edtPrice = (EditText) findViewById(R.id.edtPrice);
134 btnChoose = (Button) findViewById(R.id.btnChoose);
135 btnAdd = (Button) findViewById(R.id.btnAdd);
136 btnList = (Button) findViewById(R.id.btnList);
137 imageView = (ImageView) findViewById(R.id.imageView);
138 }
139
140
141}
142
143package com.demo.androidgudang;
144
145import android.content.Context;
146import android.database.Cursor;
147import android.database.sqlite.SQLiteDatabase;
148import android.database.sqlite.SQLiteOpenHelper;
149import android.database.sqlite.SQLiteStatement;
150
151public class SQLiteHelper extends SQLiteOpenHelper{
152
153 //constructor
154 SQLiteHelper(Context context,
155 String name,
156 SQLiteDatabase.CursorFactory factory,
157 int version){
158 super(context, name, factory, version);
159 }
160
161 public void queryData(String sql){
162 SQLiteDatabase database = getWritableDatabase();
163 database.execSQL(sql);
164 }
165
166 //insertData
167 public void insertData(String name, String stok, String jual, byte[] imstok){
168 SQLiteDatabase database = getWritableDatabase();
169 //query to insert record in database table
170 String sql = "INSERT INTO RECORD VALUES(NULL, ?, ?, ?, ?)"; //where "RECORD" is table name in database we will create in mainActivity
171
172 SQLiteStatement statement = database.compileStatement(sql);
173 statement.clearBindings();
174
175 statement.bindString(1, name);
176 statement.bindString(2, stok);
177 statement.bindString(3, jual);
178 statement.bindBlob(4, imstok);
179
180 statement.executeInsert();
181 }
182
183 //updateData
184 public void updateData(String name, String stok, String jual, byte[] imstok, int id){
185 SQLiteDatabase database = getWritableDatabase();
186 //query to update record
187 String sql = "UPDATE RECORD SET name=?, stok=?, jual=?, imstok=? WHERE id=?";
188
189 SQLiteStatement statement = database.compileStatement(sql);
190
191 statement.bindString(1, name);
192 statement.bindString(2, stok);
193 statement.bindString(3, jual);
194 statement.bindBlob(4, imstok);
195 statement.bindDouble(5, (double)id);
196
197 statement.execute();
198 database.close();
199 }
200
201 //deleteData
202 public void deleteData(int id){
203 SQLiteDatabase database = getWritableDatabase();
204 //query to delete record using id
205 String sql = "DELETE FROM RECORD WHERE id=?";
206
207 SQLiteStatement statement = database.compileStatement(sql);
208 statement.clearBindings();
209 statement.bindDouble(1, (double)id);
210
211 statement.execute();
212 database.close();
213 }
214
215 public Cursor getData(String sql){
216 SQLiteDatabase database = getReadableDatabase();
217 return database.rawQuery(sql, null);
218 }
219
220 @Override
221 public void onCreate(SQLiteDatabase sqLiteDatabase) {
222
223 }
224
225 @Override
226 public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
227
228 }
229}
230
231package com.demo.androidgudang;
232
233public class Model {
234 private int id;
235 private String name;
236 private String stok;
237 private String jual;
238 private byte[] image;
239
240 public Model(int id, String name, String stok, String jual, byte[] image) {
241 this.id = id;
242 this.name = name;
243 this.stok = stok;
244 this.jual = jual;
245 this.image = image;
246 }
247
248 public int getId() {
249 return id;
250 }
251
252 public void setId(int id) {
253 this.id = id;
254 }
255
256 public String getName() {
257 return name;
258 }
259
260 public void setName(String name) {
261 this.name = name;
262 }
263
264 public String getStok() {
265 return stok;
266 }
267
268 public void setStok(String stok) {
269 this.stok = stok;
270 }
271
272 public String getJual() {
273 return jual;
274 }
275
276 public void setJual(String jual) {
277 this.jual = jual;
278 }
279
280 public byte[] getImage() {
281 return image;
282 }
283
284 public void setImage(byte[] image) {
285 this.image = image;
286 }
287}
288
289package com.demo.androidgudang;
290
291import android.Manifest;
292import android.app.Activity;
293import android.app.Dialog;
294import android.content.DialogInterface;
295import android.content.Intent;
296import android.content.pm.PackageManager;
297import android.database.Cursor;
298import android.graphics.Bitmap;
299import android.graphics.drawable.BitmapDrawable;
300import android.net.Uri;
301import android.support.annotation.NonNull;
302import android.support.v4.app.ActivityCompat;
303import android.support.v7.app.AlertDialog;
304import android.support.v7.app.AppCompatActivity;
305import android.os.Bundle;
306import android.util.Log;
307import android.view.View;
308import android.widget.AdapterView;
309import android.widget.Button;
310import android.widget.EditText;
311import android.widget.ImageView;
312import android.widget.ListView;
313import android.widget.Toast;
314
315import com.theartofdev.edmodo.cropper.CropImage;
316import com.theartofdev.edmodo.cropper.CropImageView;
317
318import java.io.ByteArrayOutputStream;
319import java.util.ArrayList;
320
321public class RecordListActivity extends AppCompatActivity {
322
323 ListView mListView;
324 ArrayList<Model> mList;
325 RecordListAdapter mAdapter = null;
326
327 ImageView imageViewIcon;
328
329
330 @Override
331 protected void onCreate(Bundle savedInstanceState) {
332 super.onCreate(savedInstanceState);
333 setContentView(R.layout.activity_record_list);
334
335 mListView = findViewById(R.id.listView);
336 mList = new ArrayList<>();
337 mAdapter = new RecordListAdapter(this, R.layout.row, mList);
338 mListView.setAdapter(mAdapter);
339
340 //get all data from sqlite
341 SQLiteHelper mSQLiteHelper = new SQLiteHelper(this, "RECORDDB.sqlite", null, 1);
342 Cursor cursor = mSQLiteHelper.getData("SELECT * FROM RECORD");
343 mList.clear();
344 while (cursor.moveToNext()){
345 int id = cursor.getInt(0);
346 String name = cursor.getString(1);
347 String stok = cursor.getString(2);
348 String jual = cursor.getString(3);
349 byte[] image = cursor.getBlob(4);
350 //add to list
351 mList.add(new Model(id, name, stok, jual, image));
352 }
353 mAdapter.notifyDataSetChanged();
354 if (mList.size()==0){
355 //if there is no record in table of database which means listview is empty
356 Toast.makeText(this, "No record found...", Toast.LENGTH_SHORT).show();
357 }
358
359 mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
360 @Override
361 public boolean onItemLongClick(AdapterView<?> adapterView, View view, final int position, long l) {
362 //alert dialog to display options of update and delete
363 final CharSequence[] items = {"Update", "Delete"};
364
365 AlertDialog.Builder dialog = new AlertDialog.Builder(RecordListActivity.this);
366
367 dialog.setTitle("Choose an action");
368 dialog.setItems(items, new DialogInterface.OnClickListener() {
369 @Override
370 public void onClick(DialogInterface dialogInterface, int i) {
371 if (i == 0){
372 //update
373 Cursor c = CrudActivity.mSQLiteHelper.getData("SELECT id FROM RECORD");
374 ArrayList<Integer> arrID = new ArrayList<Integer>();
375 while (c.moveToNext()){
376 arrID.add(c.getInt(0));
377 }
378 //show update dialog
379 showDialogUpdate(RecordListActivity.this, arrID.get(position));
380 }
381 if (i==1){
382 //delete
383 Cursor c = CrudActivity.mSQLiteHelper.getData("SELECT id FROM RECORD");
384 ArrayList<Integer> arrID = new ArrayList<Integer>();
385 while (c.moveToNext()){
386 arrID.add(c.getInt(0));
387 }
388 showDialogDelete(arrID.get(position));
389 }
390 }
391 });
392 dialog.show();
393 return true;
394 }
395 });
396
397
398 }
399
400 private void showDialogDelete(final int idRecord) {
401 AlertDialog.Builder dialogDelete = new AlertDialog.Builder(RecordListActivity.this);
402 dialogDelete.setTitle("Warning!!");
403 dialogDelete.setMessage("Are you sure to delete?");
404 dialogDelete.setPositiveButton("OK", new DialogInterface.OnClickListener() {
405 @Override
406 public void onClick(DialogInterface dialogInterface, int i) {
407 try {
408 CrudActivity.mSQLiteHelper.deleteData(idRecord);
409 Toast.makeText(RecordListActivity.this, "Delete successfully", Toast.LENGTH_SHORT).show();
410 }
411 catch (Exception e){
412 Log.e("error", e.getMessage());
413 }
414 updateRecordList();
415 }
416 });
417 dialogDelete.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
418 @Override
419 public void onClick(DialogInterface dialogInterface, int i) {
420 dialogInterface.dismiss();
421 }
422 });
423 dialogDelete.show();
424 }
425
426 private void showDialogUpdate(Activity activity, final int position){
427 final Dialog dialog = new Dialog(activity);
428 dialog.setContentView(R.layout.update_dialog);
429 dialog.setTitle("Update");
430
431 imageViewIcon = dialog.findViewById(R.id.imageViewRecord);
432 final EditText edtName = dialog.findViewById(R.id.edtName);
433 final EditText edtStok = dialog.findViewById(R.id.edtStok);
434 final EditText edtJual = dialog.findViewById(R.id.edtJual);
435 Button btnUpdate = dialog.findViewById(R.id.btnUpdate);
436
437 //set width of dialog
438 int width = (int)(activity.getResources().getDisplayMetrics().widthPixels*0.95);
439 //set hieght of dialog
440 int height = (int)(activity.getResources().getDisplayMetrics().heightPixels*0.7);
441 dialog.getWindow().setLayout(width,height);
442 dialog.show();
443
444 //in update dialog click image view to update image
445 imageViewIcon.setOnClickListener(new View.OnClickListener() {
446 @Override
447 public void onClick(View view) {
448 //check external storage permission
449 ActivityCompat.requestPermissions(
450 RecordListActivity.this,
451 new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
452 888
453 );
454 }
455 });
456 btnUpdate.setOnClickListener(new View.OnClickListener() {
457 @Override
458 public void onClick(View view) {
459 try {
460 CrudActivity.mSQLiteHelper.updateData(
461 edtName.getText().toString().trim(),
462 edtStok.getText().toString().trim(),
463 edtJual.getText().toString().trim(),
464 CrudActivity.imageViewToByte(imageViewIcon),
465 position
466 );
467 dialog.dismiss();
468 Toast.makeText(getApplicationContext(), "Update Successfull", Toast.LENGTH_SHORT).show();
469 }
470 catch (Exception error){
471 Log.e("Update error", error.getMessage());
472 }
473 updateRecordList();
474 }
475 });
476
477 }
478
479 private void updateRecordList() {
480 //get all data from sqlite
481 Cursor cursor = CrudActivity.mSQLiteHelper.getData("SELECT * FROM RECORD");
482 mList.clear();
483 while (cursor.moveToNext()){
484 int id = cursor.getInt(0);
485 String name = cursor.getString(1);
486 String stok = cursor.getString(2);
487 String jual = cursor.getString(3);
488 byte[] image = cursor.getBlob(4);
489
490 mList.add(new Model(id,name,stok,jual,image));
491 }
492 mAdapter.notifyDataSetChanged();
493 }
494
495
496 public static byte[] imageViewToByte(ImageView image) {
497 Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
498 ByteArrayOutputStream stream = new ByteArrayOutputStream();
499 bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
500 byte[] byteArray = stream.toByteArray();
501 return byteArray;
502 }
503
504 @Override
505 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
506 if (requestCode == 888){
507 if (grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
508 //gallery intent
509 Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
510 galleryIntent.setType("image/*");
511 startActivityForResult(galleryIntent, 888);
512 }
513 else {
514 Toast.makeText(this, "Don't have permission to access file location", Toast.LENGTH_SHORT).show();
515 }
516 return;
517 }
518 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
519 }
520
521 @Override
522 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
523
524 if (requestCode == 888 && resultCode == RESULT_OK){
525 Uri imageUri = data.getData();
526 CropImage.activity(imageUri)
527 .setGuidelines(CropImageView.Guidelines.ON) //enable image guidlines
528 .setAspectRatio(1,1)// image will be square
529 .start(this);
530 }
531 if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){
532 CropImage.ActivityResult result =CropImage.getActivityResult(data);
533 if (resultCode == RESULT_OK){
534 Uri resultUri = result.getUri();
535 //set image choosed from gallery to image view
536 imageViewIcon.setImageURI(resultUri);
537 }
538 else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE){
539 Exception error = result.getError();
540 }
541 }
542
543 super.onActivityResult(requestCode, resultCode, data);
544 }
545}
546
547package com.demo.androidgudang;
548
549import android.content.Context;
550import android.graphics.Bitmap;
551import android.graphics.BitmapFactory;
552import android.view.LayoutInflater;
553import android.view.View;
554import android.view.ViewGroup;
555import android.widget.BaseAdapter;
556import android.widget.ImageView;
557import android.widget.TextView;
558
559import java.util.ArrayList;
560
561public class RecordListAdapter extends BaseAdapter {
562
563 private Context context;
564 private int layout;
565 private ArrayList<Model> recordList;
566
567 public RecordListAdapter(Context context, int layout, ArrayList<Model> recordList) {
568 this.context = context;
569 this.layout = layout;
570 this.recordList = recordList;
571 }
572
573 @Override
574 public int getCount() {
575 return recordList.size();
576 }
577
578 @Override
579 public Object getItem(int i) {
580 return recordList.get(i);
581 }
582
583 @Override
584 public long getItemId(int i) {
585 return i;
586 }
587
588 private class ViewHolder{
589 ImageView imageView;
590 TextView txtName, txtStok, txtJual;
591 }
592
593 @Override
594 public View getView(int i, View view, ViewGroup viewGroup) {
595
596 View row = view;
597 ViewHolder holder = new ViewHolder();
598
599 if (row==null){
600 LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
601 row = inflater.inflate(layout, null);
602 holder.txtName = row.findViewById(R.id.txtName);
603 holder.txtStok = row.findViewById(R.id.txtStok);
604 holder.txtJual = row.findViewById(R.id.txtJual);
605 holder.imageView = row.findViewById(R.id.imgIcon);
606 row.setTag(holder);
607 }
608 else {
609 holder = (ViewHolder)row.getTag();
610 }
611
612 Model model = recordList.get(i);
613
614 holder.txtName.setText(model.getName());
615 holder.txtStok.setText(model.getStok());
616 holder.txtJual.setText(model.getJual());
617
618 byte[] recordImage = model.getImage();
619 Bitmap bitmap = BitmapFactory.decodeByteArray(recordImage, 0, recordImage.length);
620 holder.imageView.setImageBitmap(bitmap);
621
622 return row;
623 }
624}