Не удалось загрузить файл на Android, и нет никаких сведений об ошибке

Я пытаюсь загрузить файл в Android / Kotlin:

class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //........... UploadFilesTask().execute(1) } //....... private class UploadFilesTask : AsyncTask<Int, Int, Int>() { override fun doInBackground(vararg params: Int?): Int? { val MEDIA_TYPE_PNG = MediaType.parse("image/jpg") val client = OkHttpClient() val requestBody = MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("title", "test123") .addFormDataPart("file", "image-name-123.jpg", RequestBody.create(MEDIA_TYPE_PNG, File("/storage/emulated/0/Download/real-file-name.jpg"))) .build() val request = Request.Builder() .url("http://httpbin.org/post") .post(requestBody) .build() val response = client.newCall(request).execute() if (!response.isSuccessful) { throw IOException("Unexpected code " + response) } else { Log.d("test", "Done123") Log.d("test", response.body().string()) } return 123 } protected fun onProgressUpdate(vararg progress: Int) { } protected override fun onPostExecute(result: Int?) { } } 

Единственное сообщение об ошибке, которое я вижу при запуске, это:

 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 

Как я могу это исправить?

Разрешения установлены:

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

и зависимость:

 compile "com.squareup.okhttp3:okhttp:3.0.1" 

Я тестировал ваш код, и он работает так, как ожидалось. Единственное отличие от моего заключается в том, что я использовал реальное устройство, поэтому путь к моему файлу – /storage/sdcard0/Download/real-file-name.jpg . Я рекомендую вам проверить, существует ли файл в хранилище эмулятора:

adb shell ls /storage/emulated/0/Download/real-file-name.jpg

Результат должен быть примерно таким:

-rw-rw-r-- root sdcard_rw 21577 2016-01-26 16:16 real-file-name.jpg

Это пример вывода вашего кода.

 01-26 18:00:52.877 29568-29644/com.omainegra.sof D/test: Done123 01-26 18:00:54.383 29568-29644/com.omainegra.sof D/test: { "args": {}, "data": "", "files": { "file": "data:image/jpg;base64,/9j/4AAQSkZJRgAB... 

Рекомендации для

Лучше (и реактивный подход) можно было бы легко сделать с помощью RxAndroid

 class MainActivity : AppCompatActivity() { val observable = Observable.create<String> { observer -> try { if (!observer.isUnsubscribed) { val MEDIA_TYPE_PNG = MediaType.parse("image/jpg") val client = OkHttpClient() val requestBody = MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("title", "test123") .addFormDataPart("file", "image-name-123.jpg", RequestBody.create(MEDIA_TYPE_PNG, File("/storage/sdcard0/Download/real-file-name.jpg"))) .build() val request = Request.Builder() .url("http://httpbin.org/post") .post(requestBody) .build() val response = client.newCall(request).execute(); if (!response.isSuccessful) throw IOException("Unexpected code " + response); observer.onNext(response.body().string()) } } catch (e: Exception) { observer.onError(e); } } lateinit var subscription: Subscription override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) subscription = observable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ response -> Log.d("test", "Done123") Log.d("test", response) }, { error -> Log.e("test", "onError", error) }) } override fun onDestroy(){ super.onDestroy() subscription.unsubscribe() } } 

Добавьте зависимости к вашему build.gradle

 compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0' 
Intereting Posts
«Тип свойства не является подтипом переопределенного абстрактного значения val» в многонаследованном поле Создание несвязанного сервиса в Котлине Kotlin и Dagger: могу ли я использовать объект @Inject для объекта, который все еще делает его нулевым / необязательным? Моши игнорирует поле в Котлине Kotlin использует интерфейс обратного вызова Java kotlin-runtime.jar не существует Как вызвать метод Котлин с более чем одной подобной сигнатурой с лямбдой? Как использовать Mockito для фрагмента Kotlin / Activity для извлечения kotlinx.android.synthetic views Out-projected type в универсальном интерфейсе запрещает использование метода с общим параметром Использование EventBus для завершения операции из базовой операции? Android: кнопка на фрагменте Как лучше подождать, пока актер не остановится в kotlinx.coroutines 0.20? Как написать файл в Котлине? Объекты поколения Kotlin Jackson от JSON Каков наилучший способ обработки нулевых ситуаций в Kotlin при расширении класса Java?