Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

Не загружается фотография из галереи (FileNotFoundExeption)

#java #android #post #android_file


Не могу загрузить фотографию из галереи и отправить ее в post-запросе.
Прикладываю код:

public void onClickImageViewAvatar(View view) {
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, RESULT_LOAD_IMAGE);
}

@Override
protected void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);

    if (resultCode == RESULT_OK) {
        try {
            final Uri imageUri = data.getData();
            final InputStream imageStream = getContentResolver().openInputStream(imageUri);
            final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
            File file = new File(imageUri.toString());

            String URL = "http://*****";
            RequestParams requestParams = new RequestParams();
            requestParams.put("photo", file);// ошибка здесь
            requestParams.put("token",user.getToken());
            requestParams.put("user_id", user.getUser_id());

            client.post(URL, requestParams, new JsonHttpResponseHandler() {

                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONObject
response) {
                    Log.i("fg", "change avatar " + response.toString());
                    try {
                        String status = response.getString("status");
                        if (Objects.equals(status, STATUS_FAIL)) {


                        } else if (Objects.equals(status, STATUS_SUCCESS)) {
                            imageViewAvatar.setImageBitmap(selectedImage);
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

            });


        } catch (FileNotFoundException e) {
            e.printStackTrace();
            Toast.makeText(ProfileSettings.this, "Something went wrong", Toast.LENGTH_LONG).show();
        }

    } else {
        Toast.makeText(ProfileSettings.this, "You haven't picked Image", Toast.LENGTH_LONG).show();
    }
}


Вывод:

java.io.FileNotFoundException
    at com.loopj.android.http.RequestParams.put(RequestParams.java:285)
    at com.loopj.android.http.RequestParams.put(RequestParams.java:247)
    at com.example.uncolor.aroundme.ProfileSettings.onActivityResult(ProfileSettings.java:302)
    at android.app.Activity.dispatchActivityResult(Activity.java:6295)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3929)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3976)
    at android.app.ActivityThread.access$1300(ActivityThread.java:176)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1578)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5747)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1104)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:870)


Заранее благодарю за помощь!
    


Ответы

Ответ 1



Возвращенный Uri не всегда является File. Вам нужно получить абсолютный путь до выбранного изображения с помощью ContentResolver: final Uri imageUri = data.getData(); Cursor c = getContentResolver().query(imageUri,null,null,null,null); if (c.moveToNext()) { String path = c.getString(c.getColumnIndex(MediaStore.MediaColumns.DATA)); File file = new File(path); RequestParams requestParams = new RequestParams(); requestParams.put("photo", file);// ошибки уже нет } c.close(); // не забудьте курсор закрыть

Комментариев нет:

Отправить комментарий