-1

I have an activity with a capture button this catpture button when clicked ,it prompts the user with an alert dialog asking to choose between gallery and camera after making the decision and capturing the image or choosing it the app currently save the image in an image view,now how can i save the images in a gridview in another activity rather than the imageview,and as much as possible avoiding using sqlite?!

mainactivity.java:

public static final int CAMERA_PERM_CODE = 101;
    public static final int CAMERA_REQUEST_CODE = 102;
    public static final int GALLERY_REQUEST_CODE = 105;

    DatabaseHelper mDatabaseHelper;
    Cursor data;
    Cursor price;
    ArrayList<myDataClass> listData;
    ArrayAdapter adapter;
    ArrayList arrayList;
    public SwipeMenuListView mListview;
    CustomAdapter custom;
    private TextView total;
    ImageView camera;
    ImageView display1;
    String currentPhotoPath;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listitemsbought);
        getSupportActionBar().hide();
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        mListview = (SwipeMenuListView) findViewById(R.id.list_items_bought);
        mDatabaseHelper = new DatabaseHelper(this);
        data  = mDatabaseHelper.getDataOfTable();
        total = (TextView) findViewById(R.id.totalpriceofitems);
        listData = new ArrayList<myDataClass>();
        camera = (ImageView) findViewById(R.id.imagetopic);
        display1 = (ImageView) findViewById(R.id.displayimage);

        display1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Listitemsbought.this,savedPics.class);
                overridePendingTransition(R.anim.slide_in,R.anim.slide_out);
                startActivity(intent);
            }
        });

        camera.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                askCameraPermission();
            }
        });
       // adapter = new ArrayAdapter<String>(this, R.layout.list_boughts,R.id.Name,listData);

        populateListView();

        final SwipeMenuCreator creator = new SwipeMenuCreator() {

            @Override
            public void create(SwipeMenu menu) {

                // create "delete" item
                SwipeMenuItem deleteItem = new SwipeMenuItem(
                        getApplicationContext());
                // set item background
                deleteItem.setBackground(new ColorDrawable(Color.rgb(0,
                        0, 0)));
                // set item width
                deleteItem.setWidth((250));
                // set a icon
                deleteItem.setIcon(R.drawable.sym_keyboard_delete_holo_dark);
                // add to menu
                menu.addMenuItem(deleteItem);
            }
        };

// set creator
        mListview.setMenuCreator(creator);




        // Left
        mListview.setSwipeDirection(SwipeMenuListView.DIRECTION_LEFT);


    }

    private void askCameraPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,new String[] {Manifest.permission.CAMERA}, CAMERA_PERM_CODE);
        }else {
            alert();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == CAMERA_PERM_CODE){
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                alert();
            }
        }else {
            Toast.makeText(this,"Camera Permission is required to use camera.",Toast.LENGTH_SHORT).show();
        }
    }

    private void alert() {
        new AlertDialog.Builder(Listitemsbought.this)
                .setTitle(null)
                .setMessage("Do you want to open gallery or take a new photo")

                // Specifying a listener allows you to take an action before dismissing the dialog.
                // The dialog is automatically dismissed when a dialog button is clicked.
                .setPositiveButton("Open Camera", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dispatchTakePictureIntent();
                    }
                })
                // A null listener allows the button to dismiss the dialog and take no further action.
                .setNegativeButton("Gallery", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Intent gallery = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                        startActivityForResult(gallery, GALLERY_REQUEST_CODE);
                    }
                })
                .setIcon(android.R.drawable.ic_menu_camera)
                .show();

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if(requestCode == CAMERA_REQUEST_CODE){
            if(resultCode == Activity.RESULT_OK){
                File f = new File(currentPhotoPath);
                display1.setImageURI(Uri.fromFile(f));
                Log.d("tag", "ABsolute Url of Image is " + Uri.fromFile(f));

                Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                Uri contentUri = Uri.fromFile(f);
                mediaScanIntent.setData(contentUri);
                this.sendBroadcast(mediaScanIntent);




            }

        }

        if(requestCode == GALLERY_REQUEST_CODE){
            if(resultCode == Activity.RESULT_OK){
                Uri contentUri = data.getData();
                String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                String imageFileName = "JPEG_" + timeStamp +"."+getFileExt(contentUri);
                Log.d("tag", "onActivityResult: Gallery Image Uri:  " +  imageFileName);
                display1.setImageURI(contentUri);




            }

        }
    }

    private String getFileExt(Uri contentUri) {
        ContentResolver c = getContentResolver();
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        return mime.getExtensionFromMimeType(c.getType(contentUri));
    }


    private File createImageFile() throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
//        File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                storageDir      /* directory */
        );

        // Save a file: path for use with ACTION_VIEW intents
        currentPhotoPath = 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) {

            }
            // Continue only if the File was successfully created
            if (photoFile != null) {
                Uri photoURI = FileProvider.getUriForFile(this,
                        "com.example.medicnes.fileprovider",
                        photoFile);
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE);
            }
        }
    }

    private void populateListView(){

        while (data.moveToNext()){
            listData.add(new myDataClass(data.getString(data.getColumnIndex("Name")),data.getString(data.getColumnIndex("Amount")),data.getString(data.getColumnIndex("Price"))));
        }

            total.setText(mDatabaseHelper.getPriceSum());


        custom = new CustomAdapter(listData, this);

        mListview.setAdapter(custom);

        //custom.notifyDataSetChanged();


    }
    public class CustomAdapter extends BaseAdapter
    {
        private Context context;
        private List<String> strings;

        public class ViewHolder {

            TextView textName;
            TextView textAmount;
            TextView textPrice;

        }

        public List<myDataClass> parkingList;

        private CustomAdapter(List<myDataClass> apps, Context context) {
            this.parkingList = apps;
            this.context = context;
            arrayList = new ArrayList<myDataClass>();
            arrayList.addAll(parkingList);
        }

        @Override
        public int getCount() {
            return parkingList.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }



        @Override
        public View getView(int position, View convertView, final ViewGroup parent)
        {
            View rowView = convertView;
            ViewHolder viewHolder = null;
            if (rowView == null) {
                LayoutInflater inflater = getLayoutInflater();
                rowView = inflater.inflate(R.layout.list_boughts, parent, false);
                viewHolder = new ViewHolder();
                viewHolder.textName = rowView.findViewById(R.id.Name);
                viewHolder.textAmount = rowView.findViewById(R.id.sdadprice);
                viewHolder.textPrice = rowView.findViewById(R.id.dfsdfad);
                rowView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            // here setting up names and images
            viewHolder.textName.setText(parkingList.get(position).getProdaname() + "");
            viewHolder.textAmount.setText(parkingList.get(position).getAmount());
            viewHolder.textPrice.setText(parkingList.get(position).getPrice());
            System.out.println(parkingList.get(position).getPrice());

            mListview.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
                    // delete

                    mDatabaseHelper.delete(parkingList.get(position).getProdaname());
                    System.out.println(parkingList.get(position).getProdaname());
                    listData.remove(index);
                    custom.notifyDataSetChanged();
                    populateListView();
                    // false : close the menu; true : not close the menu
                    return false;
                }
            });

            return rowView;
        }
    }
3
  • How many images should be stored in that gridview?
    – blackapps
    Commented May 1, 2020 at 7:36
  • @blackapps According to the user,but mainly they won't be more than 10,or 15
    – zyngot
    Commented May 1, 2020 at 17:11
  • You add the urls to an arraylist and transfer the arraylist to the other activity.
    – blackapps
    Commented May 1, 2020 at 19:47

1 Answer 1

0

Create a Offline database in scoped storage but this database will be deleted when user uninstall the app.

File mainfolder = getDir("datafolder", Context.MODE_PRIVATE);
Bitmap bitmap = BitmapFactory.decode(currentphotopath);
String name = new SimpleDateFormate("dd_mm_yyyy_hhss") + ".jpg"; // this or generate new file name each time user uploads.
File file = new File(mainfolder, name);
FileOutputStreme fout = new FIleOutputStreme(file);
bitmap.compress(jpg, 100, fout);
fout.close();

//listing all the files in mainfolder and set to gridview
File[] files = mainfolder.listFiles();
customView cview = new customView(this, files);
gridview.setAdapter(cview);

//adapter customview class

public class customview extends ArrayAdapter{
private Files[] files;
.
.`
.

public customview (Activity activity, Files[] fls){
files = fls;
}

@Override
public View getView(int position, View convertView, final ViewGroup parent){

Bitmap bitmap = BitmapFactory.decode(files[position].getAbsolutePath());
imageview.setImageBitmap(bitmap);
}
}
3
  • Create a Offline database. That is not what you do. Instead you copy all selected files to a specific directory. And the copy should not be done using an intermediate bitmap. Better just copy the file.
    – blackapps
    Commented May 1, 2020 at 7:58
  • starting from android 10 its not supported to get file paths, you can only get the inputstreme or uri using media. and also you can't get directory of internal storage too.
    – pradhu
    Commented May 2, 2020 at 13:32
  • Create a Offline database. Repeat: That is not what you do. Instead you copy all selected files to a specific directory.
    – blackapps
    Commented May 2, 2020 at 14:42

Not the answer you're looking for? Browse other questions tagged or ask your own question.