Как я могу взять путь фото с камеры в другой деятельности и отправить его залпом на сервер? - PullRequest
0 голосов
/ 14 апреля 2020

Я пишу этот код и получаю путь к фотографии с намерением в своей Активности, и я правильно показываю его на изображении.

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)
    }
}

1 Ответ

0 голосов
/ 14 апреля 2020

проверьте URL-адрес растрового изображения. params ["image"] = DataPart ("$ imagename.jpg", getFileDataFromDrawable (bitmap)) вы не установили URL, не так ли? откуда вы получаете изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...