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