3

I am creating an android app. I need to implement a code for uploading profile pic either from gallery or from by capturing from camera.An alert will be shown on clicking the part where picture to be uploaded. It consists of three options One to capture from camera,One to take from gallery,One to cancel.I can successfully image captured from camera buy when I try to upload Image from gallery i got this error

E/MainActivity: Response from server: java.io.FileNotFoundException: /storage/emulated/0/Pictures/Upload/IMG_20170227_142713.jpg (No such file or directory)

This is the code I used to for alert builder to show options and also to open image gallery or to launch camera

//code to choose profile pic
    iv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            /*Toast.makeText(getApplicationContext(),
                    "Please choose a photo", Toast.LENGTH_LONG)
                    .show();*/
            final CharSequence[] items = { "Take Photo", "Choose from Library",
                    "Cancel" };

            AlertDialog.Builder builder = new AlertDialog.Builder(LeftMenusMediaActivity.this);
            builder.setTitle("Add Photo!");
            builder.setItems(items,new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int item) {


                    if (items[item].equals("Take Photo")) {

                        //define the file-name to save photo taken by Camera activity
                        String fileName = "new-photo-name.jpg";
                        //create parameters for Intent with filename
                        ContentValues values = new ContentValues();
                        values.put(MediaStore.Images.Media.TITLE, fileName);
                        values.put(MediaStore.Images.Media.DESCRIPTION,"Image captured by camera");
                        //imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState)
                        imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
                        //create new Intent
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        imageUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

                        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

                        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                        startActivityForResult(intent, PICK_Camera_IMAGE);




                    } else if (items[item].equals("Choose from Library")) {


                        try {
                            Intent gintent = new Intent();
                            gintent.setType("image/*");
                            gintent.setAction(Intent.ACTION_GET_CONTENT);

                            startActivityForResult(
                                    Intent.createChooser(gintent, "Select Picture"),
                                    PICK_IMAGE);
                        } catch (Exception e) {
                            Toast.makeText(getApplicationContext(),
                                    e.getMessage(),
                                    Toast.LENGTH_LONG).show();
                            Log.e(e.getClass().getName(), e.getMessage(), e);
                        }



                    } else if (items[item].equals("Cancel")) {
                        dialog.dismiss();
                    }
                }
            });
            builder.show();
        }
    });

This is my onActivity result function

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     selectedImageUri = null;
    String filePath = null;
    switch (requestCode) {
        case PICK_IMAGE:
            if (resultCode == Activity.RESULT_OK) {
                selectedImageUri = data.getData();
                // getPath(selectedImageUri);
                launchUploadActivity(true);
                Toast.makeText(this, selectedImageUri.toString(), Toast.LENGTH_SHORT).show();
            }
            break;
        case PICK_Camera_IMAGE:
            if (resultCode == RESULT_OK) {
                //use imageUri here to access the image
                selectedImageUri = imageUri;
                launchUploadActivity(true);
                    /*Bitmap mPic = (Bitmap) data.getExtras().get("data");
                    selectedImageUri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), mPic, getResources().getString(R.string.app_name), Long.toString(System.currentTimeMillis())));*/
            } else if (resultCode == RESULT_CANCELED) {
                Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
            }
            break;
    }

This is my function to launch upload activity

 private void launchUploadActivity(boolean isImage){
    Intent i = new Intent(LeftMenusMediaActivity.this, UploadActivity.class);
    i.putExtra("filePath", selectedImageUri.getPath());
    i.putExtra("isImage", isImage);
    startActivity(i);
}

This the my Upload activity class

public class UploadActivity extends Activity {
// LogCat tag
private static final String TAG = MainActivity.class.getSimpleName();


private String filePath = null;

long totalSize = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Changing action bar background color
 /*     getActionBar().setBackgroundDrawable(
            new ColorDrawable(Color.parseColor(getResources().getString(
                    R.color.action_bar))));*/

    // Receiving the data from previous activity
    Intent i = getIntent();

    // image or video path that is captured in previous activity
    filePath = i.getStringExtra("filePath");

    // boolean flag to identify the media type, image or video
    boolean isImage = i.getBooleanExtra("isImage", true);

    if (filePath != null) {
        // Displaying the image or video on the screen
        //previewMedia(isImage);
        new UploadFileToServer().execute();
    } else {
        Toast.makeText(getApplicationContext(),
                "Sorry, file path is missing!", Toast.LENGTH_LONG).show();
    }



}

/**
 * Uploading the file to server
 * */
private class UploadFileToServer extends AsyncTask<Void, Integer, String> {
    @Override
    protected void onPreExecute() {
        // setting progress bar to zero
    //  progressBar.setProgress(0);
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(Void... params) {
        return uploadFile();
    }

    @SuppressWarnings("deprecation")
    private String uploadFile() {
        String responseString = null;

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(AppConfig.URL_PHOTO);

        try {
            AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                    new AndroidMultiPartEntity.ProgressListener() {


                        @Override
                        public void transferred(long num) {
                            publishProgress((int) ((num / (float) totalSize) * 100));
                        }
                    });


            File sourceFile = new File(filePath);
            ;
            // Adding file data to http body
            entity.addPart("image", new FileBody(sourceFile));

            // Extra parameters if you want to pass to server
            entity.addPart("website",
                    new StringBody("www.androidhive.info"));
            entity.addPart("email", new StringBody("abc@gmail.com"));

            totalSize = entity.getContentLength();
            httppost.setEntity(entity);

            // Making server call

            HttpResponse response = httpclient.execute(httppost);

            HttpEntity r_entity = response.getEntity();

            int statusCode = response.getStatusLine().getStatusCode();

            if (statusCode == 200) {
                // Server response

                responseString = EntityUtils.toString(r_entity);

            } else {
                responseString = "Error occurred! Http Status Code: "
                        + statusCode;
            }

        } catch (ClientProtocolException e) {
            responseString = e.toString();
        } catch (IOException e) {
            responseString = e.toString();
        }

        return responseString;

    }

    @Override
    protected void onPostExecute(String result) {
        Log.e(TAG, "Response from server: " + result);

        // showing the server response in an alert dialog
        showAlert(result);

        super.onPostExecute(result);

    }

}

/**
 * Method to show alert dialog
 * */
private void showAlert(String message) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(message).setTitle("Response from Servers")
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // do nothing
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
}

}

What are the changes needed to make upload from gallery working

user1810
  • 121
  • 1
  • 2
  • 10
  • please refer this link it will help http://stackoverflow.com/questions/28000218/java-io-filenotfoundexception-when-uploading-pics-from-camera-using-http-post-mu – Pratik Gondil Feb 27 '17 at 09:43
  • may be you should try uploading a bitmap instead of passing the file path as the Web service isexpecting a file and you are giving a string – Muhammad Hamza Shahid Feb 27 '17 at 10:06
  • `Response from server: java.io.FileNotFoundException: /storage/emulated/0/Pictures/Upload/IMG_20170227_142713.jpg (No such file or directory)`. That is a very strange response from a server! First: why should the server know the path of a file on an Android device? Second: which server would try to open a file which is on an Android device? – greenapps Feb 27 '17 at 10:40
  • If you have problems uploading a file picked from gallery then you should post only that code. Now you bother us with all kind of other stuff. You are supposed to show only relevant code. You posted way too much irrelevant code which makes it unpleasant to dig into your problem. – greenapps Feb 27 '17 at 10:43
  • Here both Image gallery and camera uses same function to upload to server.I have only specified options to select between camera or gallery which is within a function.I haven't specified any irrelavant code – user1810 Feb 27 '17 at 11:23
  • Well if you dont want help then please react the way you do now. – greenapps Feb 27 '17 at 12:14
  • Sorry for my rude. – user1810 Feb 27 '17 at 15:51
  • I understand what the problem is ,during capturing image using camera images are stored in a separate folder called upload which is created during image capturing process. Path to that folder is passed during uploading activity. I missed to post that section of code here. But during uploading image from image gallery, path to external storage is passing,Only image from upload folder can be stored server.So file not found exception was shown as response from server. I need to find some other code for uploading image to server – user1810 Feb 27 '17 at 16:03

6 Answers6

2

My app is working now. I made following changes to my code.

On activity result part

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     selectedImageUri = null;

    switch (requestCode) {
        case PICK_IMAGE:
            if (resultCode == Activity.RESULT_OK) {
                selectedImageUri = data.getData();
                imagepath = getPath(selectedImageUri);


                launchUploadActivity2(true);
                Bitmap bitmap=BitmapFactory.decodeFile(imagepath);
                iv.setImageBitmap(bitmap);


                Toast.makeText(this, selectedImageUri.toString(), Toast.LENGTH_SHORT).show();
            }
            break;
        case PICK_Camera_IMAGE:
            if (resultCode == RESULT_OK) {
                //use imageUri here to access the image
                selectedImageUri = imageUri;
                imagepath2=selectedImageUri.getPath();
                launchUploadActivity(true);
                Bitmap bitmap=BitmapFactory.decodeFile(imagepath2);
                iv.setImageBitmap(bitmap);
                Log.d(TAG,selectedImageUri.toString());
                Toast.makeText(this, selectedImageUri.toString(), Toast.LENGTH_SHORT).show();

            } else if (resultCode == RESULT_CANCELED) {
                Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
            }
            break;
    }

I made two separate functions for launching upload activity. Function for launching upload activity class for uploading image from gallery to server is this

    private void launchUploadActivity2(boolean isImage){

    filePath=imagepath;
    if (filePath != null) {
        // Displaying the image or video on the screen
        //previewMedia(isImage);
        new UploadImageToServer1().execute();
    } else {
        Toast.makeText(getApplicationContext(),
                "Sorry, file path is missing!", Toast.LENGTH_LONG).show();
    }
}

Function for uploading activity class for uploading image by capturing to server

    private void launchUploadActivity(boolean isImage){

    filePath=selectedImageUri.getPath();
    if (filePath != null) {
        // Displaying the image or video on the screen
        //previewMedia(isImage);
        new UploadImageToServer().execute();
    } else {
        Toast.makeText(getApplicationContext(),
                "Sorry, file path is missing!", Toast.LENGTH_LONG).show();
    }
}

Upload activity class

private class UploadImageToServer extends AsyncTask<Void, Integer, String> {
    @Override
    protected void onPreExecute() {
        // setting progress bar to zero
        //  progressBar.setProgress(0);
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(Void... params) {
        return uploadFile();
    }

    @SuppressWarnings("deprecation")
    private String uploadFile() {
        String responseString = null;

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(AppConfig.URL_PHOTO);

        try {
            AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                    new AndroidMultiPartEntity.ProgressListener() {


                        @Override
                        public void transferred(long num) {
                            publishProgress((int) ((num / (float) totalSize) * 100));
                        }
                    });


            File sourceFile = new File(filePath);
            ;
            // Adding file data to http body
            entity.addPart("image", new FileBody(sourceFile));

            // Extra parameters if you want to pass to server
            entity.addPart("userid",
                    new StringBody(session.getuid()));


            totalSize = entity.getContentLength();
            httppost.setEntity(entity);

            // Making server call

            HttpResponse response = httpclient.execute(httppost);

            HttpEntity r_entity = response.getEntity();

            int statusCode = response.getStatusLine().getStatusCode();

            if (statusCode == 200) {
                // Server response

                responseString = EntityUtils.toString(r_entity);

            } else {
                responseString = "Error occurred! Http Status Code: "
                        + statusCode;
            }

        } catch (ClientProtocolException e) {
            responseString = e.toString();
        } catch (IOException e) {
            responseString = e.toString();
        }

        return responseString;

    }

    @Override
    protected void onPostExecute(String result) {
        Log.e(TAG, "Response from server: " + result);

        // showing the server response in an alert dialog


        super.onPostExecute(result);

    }




}

This is the function to create path to a particular folder while capturing image

/**
 * Creating file uri to store image/video
 */
public Uri getOutputMediaFileUri(int type) {
    return Uri.fromFile(getOutputMediaFile(type));
}

/**
 * returning image / video
 */
private static File getOutputMediaFile(int type) {

    // External sdcard location
    File mediaStorageDir = new File(
            Environment
                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            AppConfig.IMAGE_DIRECTORY_NAME);

    // Create the storage directory if it does not exist
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d(TAG, "Oops! Failed create "
                    + AppConfig.IMAGE_DIRECTORY_NAME + " directory");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
            Locale.getDefault()).format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + timeStamp + ".jpg");
    } else if (type == MEDIA_TYPE_VIDEO) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "VID_" + timeStamp + ".mp4");
    } else {
        return null;
    }

    return mediaFile;
}

Now I can upload from both gallery and camera

user1810
  • 121
  • 1
  • 2
  • 10
1

Please check the permission in manifest

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Hope this helps.:)

Pratik Gondil
  • 689
  • 1
  • 6
  • 17
  • I have already included it my android manifest file. That's not the problem – user1810 Feb 27 '17 at 09:55
  • try this http://stackoverflow.com/questions/28000218/java-io-filenotfoundexception-when-uploading-pics-from-camera-using-http-post-mu – Pratik Gondil Feb 27 '17 at 10:12
  • The link you provided is for uploading image by capturing from camera.That works fine for me. I need code to upload image from gallery to server – user1810 Feb 27 '17 at 10:29
  • That is a strange question. Uploading should not make any difference. And if there is a difference you should indicate which one. – greenapps Feb 27 '17 at 10:36
1

this blog and this repo will be help to you

onur
  • 98
  • 1
  • 8
0

OkHttpClient client = new OkHttpClient();

        RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
                .addFormDataPart("SessionId", "")
                .addFormDataPart("UserDeviceGuid", "")
                .addFormDataPart("UserPhoto", "photo.png", RequestBody.create(MEDIA_TYPE_PNG, new File(path)))
                .build();

        serverURL = serverURL + "/FileUpload/UserPhotoUpload";
        Request request = new Request.Builder().url(serverURL).post(requestBody).build();
        try {
            Response response = client.newCall(request).execute();
            String strResponse = response.body().string();
            Log.d("upload image", "Response" + strResponse);
            if (!response.isSuccessful()) {
            } else {
                JSONObject jsonResponse = null;
                try {
                    jsonResponse = new JSONObject(strResponse);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                if (jsonResponse != null && jsonResponse.has("Success") && jsonResponse.getBoolean("Success")) {
                    isSuccess = true;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();

        } catch (Exception e) {
            e.printStackTrace();
        }
  1. to get retrofit object if (retrofit == null) { retrofit = new retrofit2.Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); } return retrofit;

  2. Interface @GET("/photos") Call<List> getAllPhotos();

  3. get galary image path private Context context;

    /* Get uri related content real local file path. */ public String getUriRealPath(Context ctx, Uri uri, int type) { this.context = ctx;

     String ret = "";
    
     if (isAboveKitKat()) {
         // Android OS above sdk version 19.
         ret = getUriRealPathAboveKitkat(ctx, uri, type);
     } else {
         // Android OS below sdk version 19
         ret = getImageRealPath(context.getContentResolver(), uri, null);
     }
    
     return ret;
    

    }

    public Uri getImageUri(Context context, Bitmap bitmap) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, "img", null); return Uri.parse(path); } catch (IllegalArgumentException e) { } catch (Exception e) { } return null; }

    @TargetApi(Build.VERSION_CODES.KITKAT) private String getUriRealPathAboveKitkat(Context ctx, Uri uri, int type) { String ret = "";

     if (ctx != null && uri != null) {
         if (type == 1) {
             if (isFileUri(uri)) {
                 ret = uri.getPath();
    
             } else if (isDocumentUri(ctx, uri)) {
                 ret = getPath(uri);
             } else if (isGooglePhotoDoc(uri.getAuthority())) {
                 ret = uri.getLastPathSegment();
    
             } else if (uri.toString().startsWith("content://com.google.android.apps.photos.contentprovider")){
                 try {
                     InputStream inputStream = context.getContentResolver().openInputStream(uri); // context needed
                     File photoFile = createTemporalFileFrom(inputStream);
                     ret = photoFile.getPath();
                 } catch (FileNotFoundException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
         } else if (isContentUri(uri)) {
             if (isGooglePhotoDoc(uri.getAuthority())) {
                 ret = uri.getLastPathSegment();
    
             } else if (uri.toString().startsWith("content://com.google.android.apps.photos.contentprovider")){
                 try {
                     InputStream inputStream = context.getContentResolver().openInputStream(uri); // context needed
                     File photoFile = createTemporalFileFrom(inputStream);
                     ret = photoFile.getPath();
                 } catch (FileNotFoundException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             } else if (uri.toString().startsWith("content://com.google.android.apps.photos.content")){
                 try {
                     InputStream is = context.getContentResolver().openInputStream(uri);
                     if (is != null) {
                         Bitmap pictureBitmap = BitmapFactory.decodeStream(is);
                         ret = getImageUri(context, pictureBitmap).toString();
                     }
                 } catch (FileNotFoundException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                 }
             } else {
                 ret = getImageRealPath(context.getContentResolver(), uri, null);
             }
         } else if (isFileUri(uri)) {
             ret = uri.getPath();
    
         } else if (isDocumentUri(ctx, uri)) {
             ret = getPath(uri);
         }
     }
    
     return ret;
    

    }

    private File createTemporalFileFrom(InputStream inputStream) throws IOException { File targetFile = null;

     if (inputStream != null) {
         int read;
         byte[] buffer = new byte[8 * 1024];
    
         targetFile = createTemporalFile();
         OutputStream outputStream = new FileOutputStream(targetFile);
    
         while ((read = inputStream.read(buffer)) != -1) {
             outputStream.write(buffer, 0, read);
         }
         outputStream.flush();
    
         try {
             outputStream.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
    
     return targetFile;
    

    }

    private File createTemporalFile() { return new File(context.getExternalCacheDir(), "tempFile.jpg"); // context needed }

    @RequiresApi(api = Build.VERSION_CODES.KITKAT) private String getPath(Uri uri) { String ret = "";

     // Get uri related document id.
     String documentId = DocumentsContract.getDocumentId(uri);
    
     // Get uri authority.
     String uriAuthority = uri.getAuthority();
    
     if (isMediaDoc(uriAuthority)) {
         String idArr[] = documentId.split(":");
         if (idArr.length == 2) {
             // First item is document type.
             String docType = idArr[0];
    
             // Second item is document real id.
             String realDocId = idArr[1];
    
             // Get content uri by document type.
             Uri mediaContentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
             if ("image".equals(docType)) {
                 mediaContentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
             } else if ("video".equals(docType)) {
                 mediaContentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
             } else if ("audio".equals(docType)) {
                 mediaContentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
             }
    
             // Get where clause with real document id.
             String whereClause = MediaStore.Images.Media._ID + " = " + realDocId;
    
             ret = getImageRealPath(context.getContentResolver(), mediaContentUri, whereClause);
         }
    
     } else if (isDownloadDoc(uriAuthority)) {
         // Build download uri.
         Uri downloadUri = Uri.parse("content://downloads/public_downloads");
    
         // Append download document id at uri end.
         Uri downloadUriAppendId = ContentUris.withAppendedId(downloadUri, Long.valueOf(documentId));
    
         ret = getImageRealPath(context.getContentResolver(), downloadUriAppendId, null);
    
     } else if (isExternalStoreDoc(uriAuthority)) {
         String idArr[] = documentId.split(":");
         if (idArr.length == 2) {
             String type = idArr[0];
             String realDocId = idArr[1];
    
             if ("primary".equalsIgnoreCase(type)) {
                 ret = Environment.getExternalStorageDirectory() + "/" + realDocId;
             }
         }
     }
     return ret;
    

    }

    /* Check whether current android os version is bigger than kitkat or not. */ private boolean isAboveKitKat() { boolean ret = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; return ret; }

    /* Check whether this uri represent a document or not. */ @TargetApi(Build.VERSION_CODES.KITKAT) private boolean isDocumentUri(Context ctx, Uri uri) { boolean ret = false; if (ctx != null && uri != null) { ret = DocumentsContract.isDocumentUri(ctx, uri); } return ret; }

    /* Check whether this uri is a content uri or not.

    • content uri like content://media/external/images/media/1302716
    • */ public boolean isContentUri(Uri uri) { boolean ret = false; if (uri != null) { String uriSchema = uri.getScheme(); if ("content".equalsIgnoreCase(uriSchema)) { ret = true; } } return ret; }

    /* Check whether this uri is a file uri or not.

    • file uri like file:///storage/41B7-12F1/DCIM/Camera/IMG_20180211_095139.jpg
    • */ public boolean isFileUri(Uri uri) { boolean ret = false; if (uri != null) { String uriSchema = uri.getScheme(); if ("file".equalsIgnoreCase(uriSchema)) { ret = true; } } return ret; }

    /* Check whether this document is provided by ExternalStorageProvider. */ private boolean isExternalStoreDoc(String uriAuthority) { boolean ret = false;

     if ("com.android.externalstorage.documents".equals(uriAuthority)) {
         ret = true;
     }
    
     return ret;
    

    }

    /* Check whether this document is provided by DownloadsProvider. */ private boolean isDownloadDoc(String uriAuthority) { boolean ret = false;

     if ("com.android.providers.downloads.documents".equals(uriAuthority)) {
         ret = true;
     }
    
     return ret;
    

    }

    /* Check whether this document is provided by MediaProvider. */ private boolean isMediaDoc(String uriAuthority) { boolean ret = false;

     if ("com.android.providers.media.documents".equals(uriAuthority)) {
         ret = true;
     }
    
     return ret;
    

    }

    /* Check whether this document is provided by google photos. */ private boolean isGooglePhotoDoc(String uriAuthority) { boolean ret = false;

     if ("com.google.android.apps.photos.content".equals(uriAuthority)) {
         ret = true;
     }
    
     return ret;
    

    }

    /* Return uri represented document file real local path.*/ public String getImageRealPath(ContentResolver contentResolver, Uri uri, String whereClause) { String ret = "";

     // Query the uri with condition.
     Cursor cursor = contentResolver.query(uri, null, whereClause, null, null);
    
     if (cursor != null) {
         boolean moveToFirst = cursor.moveToFirst();
         if (moveToFirst) {
    
             // Get columns name by uri type.
             String columnName = MediaStore.Images.Media.DATA;
    
             if (uri == MediaStore.Images.Media.EXTERNAL_CONTENT_URI) {
                 columnName = MediaStore.Images.Media.DATA;
             } else if (uri == MediaStore.Audio.Media.EXTERNAL_CONTENT_URI) {
                 columnName = MediaStore.Audio.Media.DATA;
             } else if (uri == MediaStore.Video.Media.EXTERNAL_CONTENT_URI) {
                 columnName = MediaStore.Video.Media.DATA;
             }
    
             // Get column index.
             int imageColumnIndex = cursor.getColumnIndex(columnName);
    
             // Get column value which is the uri related file local path.
             ret = cursor.getString(imageColumnIndex);
         }
     }
    
     if (cursor != null){
         cursor.close();
     }
    
     return ret;
    

    }

0

Below code get image from gallery and go to show in image view

@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 1111: if (resultCode == Activity.RESULT_OK) { if (data != null) { Uri selectedImage = data.getData(); if (selectedImage == null) { Bitmap bitmap = (Bitmap) data.getExtras().get("data");

                        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

                        String name = "" + System.currentTimeMillis();
                        String path = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, name, null);
                        selectedImage = Uri.parse(path);
                    }
                    if (selectedImage != null) {
                        adapter.dataList.get(index).setUri(selectedImage);
                        adapter.notifyDataSetChanged();
                        gotoUploadImage(selectedImage);
                    }
                }
            }
            break;
    }
}
0

Below code is to get list from web server

GetDataService service = RetrofitClientInstance.getRetrofitInstance().create(GetDataService.class);

    Call<List<RetroPhoto>> call = service.getAllPhotos();
    call.enqueue(new Callback<List<RetroPhoto>>() {

        @Override
        public void onResponse(Call<List<RetroPhoto>> call, Response<List<RetroPhoto>> response) {
            progressDoalog.dismiss();
            generateDataList(response.body());
        }

        @Override
        public void onFailure(Call<List<RetroPhoto>> call, Throwable t) {
            progressDoalog.dismiss();
            Toast.makeText(HomeScreenActivity.this, "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show();
        }
    });