#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(); // не забудьте курсор закрыть
Комментариев нет:
Отправить комментарий