如何在另一个活动中从相机获取照片路径,并将其与截击一起发送到服务器



我编写了这段代码,并在我的"活动"中获得了照片路径,并且我在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)
}
}

检查位图url。params["image"]=DataPart("$imagename.jpg",getFileDataFromDrawable(位图((你没有设置网址,是吗?从你得到图像的地方。

最新更新