我如何在其他活动中从相机拍摄照片路径,并通过齐射将其发送到服务器?

问题描述 投票:0回答:1

我编写了这段代码,并在我的Activity中获取了意图的照片路径,并且在imageView上正确显示了它。

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)
    }
}
android kotlin android-volley android-camera
1个回答
0
投票

检查位图网址。params [“ image”] = DataPart(“ $ imagename.jpg”,getFileDataFromDrawable(bitmap))您没有设置网址,对吗?从那里获得图像。

© www.soinside.com 2019 - 2024. All rights reserved.