Я пишу этот код и получаю путь к фотографии с намерением в своей Активности, и я правильно показываю его на изображении.
class ImageServerActivity : AppCompatActivity() {
private lateinit var bitmap: Bitmap
val token = "<tokenData>"
// var bitmap: Bitmap? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_image_server)
btn_server.setOnClickListener {
uploadImage()
progressBarSend.visibility = View.VISIBLE
}
val path = intent.getStringExtra("path")
getBitmap(path)
val image = File(path)
println("PAthaga :: $path")
}
fun getBitmap(path: String?): Bitmap? {
try {
val f = File(path)
val options = BitmapFactory.Options()
options.inPreferredConfig = Bitmap.Config.ARGB_8888
bitmap = BitmapFactory.decodeStream(FileInputStream(f), null, options)!!
val rotatedBitmap = bitmap?.rotate(90F)
imgTest.setImageBitmap(rotatedBitmap)
} catch (e: Exception) {
e.printStackTrace()
}
return bitmap
}
fun Bitmap.rotate(degrees: Float): Bitmap {
val matrix = Matrix().apply { postRotate(degrees) }
return Bitmap.createBitmap(this, 0, 0, width, height, matrix, true)
}
Но теперь я хочу загрузить эту фотографию на сервер с залпом, но это не работает Моя попытка:
private fun uploadImage() {
val url = "http://application-test.com/api/v1/image"
val listener = Response.Listener<NetworkResponse> { response ->
progressBarSend.visibility = View.GONE
val jsonObject = JSONObject(String(response.data))
Toast.makeText(applicationContext, jsonObject.getString("path"), Toast.LENGTH_LONG).show()
}
val errorListener = Response.ErrorListener { error ->
progressBarSend.visibility = View.GONE
Toast.makeText(applicationContext, error.toString(), Toast.LENGTH_LONG).show()
}
val request = object : VolleyMultipartRequest(Method.PUT, url, listener, errorListener) {
@Throws(AuthFailureError::class)
override fun getHeaders(): Map<String, String> {
val params: MutableMap<String, String> =
HashMap()
params["Authorization"] ="Bearer $token"
params["Accept"] = "application/json"
return params
}
override val byteData: Map<String, DataPart>?
protected get() {
val params: MutableMap<String, DataPart> = HashMap()
val imagename = System.currentTimeMillis()
params["image"] = DataPart("$imagename.jpg", getFileDataFromDrawable(bitmap))
return params
}
}
AppSingleton.getInstance(applicationContext).addToRequestQueue(request)
}
Когда я использую отладку, я обнаружил, что эта строка кода возвращает мне пустое растровое значение, и я не знаю почему:
val request = object : VolleyMultipartRequest(Method.PUT, url, listener, errorListener) {
@Throws(AuthFailureError::class)
override fun getHeaders(): Map<String, String> {
val params: MutableMap<String, String> =
HashMap()
params["Authorization"] ="Bearer $token"
params["Accept"] = "application/json"
return params
}
override val byteData: Map<String, DataPart>?
protected get() {
val params: MutableMap<String, DataPart> = HashMap()
val imagename = System.currentTimeMillis()
params["image"] = DataPart("$imagename.jpg", getFileDataFromDrawable(bitmap)). //bitmap = "" <-----
return params
}
}
AppSingleton.getInstance(applicationContext).addToRequestQueue(request)
}
}