我有非常基本的知识,但是基本上我有一个带有侦听器的按钮,当按下该按钮时,它应该将GET请求发送到特定的URL,但是每次按下该按钮,它只会使我的应用程序崩溃,logcat不会崩溃提这个问题,只是表明该应用已关闭。
I/System: core_booster, getBoosterConfig = false
I/Process: Sending signal. PID: 18019 SIG: 9
我曾尝试使用多个库,但是它们似乎在崩溃时都具有相同的结果,我为它提供了Internet权限,因此该部分应该很好,当前在该版本上使用的库是khttp >
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import khttp.get
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
botao_off_1.setOnClickListener {
val ipAddress = get(url = "http://192.168.1.1/27/off").jsonObject.getString("origin")
}
}
}
应该在后端非常基础,并且只有几个按钮。
我希望它能够完成请求,IP和所有其他信息都应该正确,但是会崩溃。
编辑:只有一些事情我把代码DHAVAL ASODARIYA发布并修改了它,它仍然崩溃,但是我设法将问题归结为ConnectException,所以我每次尝试发出请求时都尝试捕获它,现在它可以工作了像黄油。
对不起,代码混乱
这只是实际执行任何操作的部分
override fun doInBackground(vararg params: Any?) {
try {
val url = params[0]
val ipAddress = get(url as String)
}
catch (e: ConnectException) {}
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
this.botao_off_1.setOnClickListener {
EnviarGet().execute("http://192.168.1.1/27/off")
}
}
}
答案 0 :(得分:4)
我看过您的代码。看来您正在主线程上进行网络调用,这导致NetworkOnMainThreadException
。
因此,在主线程上执行调用使用异步任务来进行网络调用。
class GetMyIP : AsyncTask<Any, Any, Any>()
{
override fun onPreExecute() {
super.onPreExecute()
}
override fun doInBackground(vararg params: Any?) {
var url = params[0]
// Make your network call here and return result
TODO("not implemented")
}
override fun onPostExecute(result: Any?) {
super.onPostExecute(result)
// The data you have return from doInBackground will be received here.
// So now you can parse the result.
}
}
通过单击按钮调用为,
GetMyIP().execute("{URL HERE}")