Ich habe versucht, khttp zu verwenden, um eine JPG-Datei in einer Android-Aktivität zu senden, aber nicht in der Lage, damit es funktioniert.
fun sendImage(view: View) {
try {
var bmp = (imageView?.drawable as BitmapDrawable).bitmap
var bos = ByteArrayOutputStream()
bmp.compress(Bitmap.CompressFormat.JPEG, 0, bos)
var response: Response? = null
findViewById<TextView>(R.id.image_desc).text = Connecting to + SERVER_URL;
try {
val job=GlobalScope.launch {
response = post(SERVER_URL, files = listOf(File(path).fileLike(name = Image.jpg)))
}
findViewById<TextView>(R.id.image_desc).text = Image contains: ${response?.text}
} catch (e: Exception) {
findViewById<TextView>(R.id.image_desc).text = Connection failed - please check fields are valid
findViewById<TextView>(R.id.image_desc).text = e.toString()
}
} catch (e: UnknownHostException) {
findViewById<TextView>(R.id.image_desc).text = Unknown host :(
e.printStackTrace()
} catch (e: IOException) {
findViewById<TextView>(R.id.image_desc).text = IO exceptiion :(
e.printStackTrace()
} catch (e: Exception) {
findViewById<TextView>(R.id.image_desc).text = Other exception :(
e.printStackTrace()
}
}
Sobald ich das Bild, image_desc Textview Text ändern Bild senden enthält: null. Ich bin sicher, dass der Server nicht das Problem ist, da, wenn ich es mit diesem Python-Code zu testen:
import requests
url=...
files = {'file': open('./test/cat.jpg', 'rb')}
r=requests.post(url,files=files)
print (r.text)
Ich erhalte die gewünschte Reaktion nach einer kurzen Verzögerung. Ich habe versucht, drehen sendImage zu einer suspendieren func und Schreiben job.join (), aber das stürzt die App. Wie soll dieses Problem beheben?