Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当连接到URL失败时,如何处理HttpURLConnection_Android_Android Asynctask_Kotlin_Httpurlconnection - Fatal编程技术网

Android 当连接到URL失败时,如何处理HttpURLConnection

Android 当连接到URL失败时,如何处理HttpURLConnection,android,android-asynctask,kotlin,httpurlconnection,Android,Android Asynctask,Kotlin,Httpurlconnection,当我的数据库运行时,一切正常。但当我的手机应用程序不运行时,它总是崩溃 错误消息: 原因:java.net.ConnectException:无法连接到/httpURL 如何解决这个问题 这是我的密码: AsyncTaskHandleJson().execute(url) inner class AsyncTaskHandleJson : AsyncTask<String, String, String>() { override fun doInBackg

当我的数据库运行时,一切正常。但当我的手机应用程序不运行时,它总是崩溃

错误消息:

原因:java.net.ConnectException:无法连接到/httpURL

如何解决这个问题

这是我的密码:

AsyncTaskHandleJson().execute(url)    

inner class AsyncTaskHandleJson : AsyncTask<String, String, String>() {
        override fun doInBackground(vararg url: String?): String {
            var text: String
            var connection = URL(url[0]).openConnection() as HttpURLConnection
            try {
                connection.connect()
                text = connection.inputStream.use { it.reader().use { reader -> reader.readText() } }
            } finally {
                connection.disconnect()
            }
            return text
        }

        override fun onPostExecute(result: String?) {
            super.onPostExecute(result)
            handleJson(result)
        }
    }
AsyncTaskHandleJson().execute(url)
内部类AsyncTaskHandleJson:AsyncTask(){
重写fun doInBackground(varargurl:String?):String{
变量文本:字符串
var connection=URL(URL[0])。openConnection()作为HttpURLConnection
试一试{
connection.connect()
text=connection.inputStream.use{it.reader()。use{reader->reader.readText()}
}最后{
连接断开()
}
返回文本
}
重写onPostExecute(结果:字符串?){
super.onPostExecute(结果)
handleJson(结果)
}
}

由于代码中没有
catch
块,因此当前未捕获任何异常

如果要处理
连接异常
,则只需捕获它:

override fun doInBackground(vararg url: String?): String {
    var text = ""
    var connection: HttpURLConnection? = null

    try {
        connection = URL(url[0]).openConnection() as HttpURLConnection
        connection.connect()
        text = connection.inputStream.use {
            it.reader().use { reader ->
                reader.readText()
            }
        }
    } catch (ce: ConnectException) {
        // ConnectionException occurred, do whatever you'd like
        ce.printStackTrace()
    } catch (e: Exception) {
        // some other Exception occurred
        e.printStackTrace()
    } finally {
        connection?.disconnect()
    }

    return text
}

请查看。

由于代码中没有
catch
块,因此当前未捕获任何异常

如果要处理
连接异常
,则只需捕获它:

override fun doInBackground(vararg url: String?): String {
    var text = ""
    var connection: HttpURLConnection? = null

    try {
        connection = URL(url[0]).openConnection() as HttpURLConnection
        connection.connect()
        text = connection.inputStream.use {
            it.reader().use { reader ->
                reader.readText()
            }
        }
    } catch (ce: ConnectException) {
        // ConnectionException occurred, do whatever you'd like
        ce.printStackTrace()
    } catch (e: Exception) {
        // some other Exception occurred
        e.printStackTrace()
    } finally {
        connection?.disconnect()
    }

    return text
}

查看.

为什么不
捕获
错误?就像CreativeCreatorMormaybeno所说的那样,只捕获错误(如果有),然后在
处理JSON(结果)
之前检查
结果
是否有可用数据。如果不绕过
handleJson()
,并向用户敬酒,说数据库无法访问(或者你想告诉他们什么)@Barns如何检查结果是否有可用数据?看起来你已经有了一个可接受的答案?你不明白什么?@Barns当调用handleJson方法时,应用程序将崩溃,下面是错误消息:pastebin.com/rnlmtsv6为什么不
捕获
错误?就像creativecreatorormaybeno所说的那样,只需捕获错误(如果有),然后在
handleJson(结果)之前
检查
结果是否有可用数据。如果不绕过
handleJson()
,并向用户敬酒,说数据库无法访问(或者你想告诉他们什么)@Barns如何检查结果是否有可用数据?看起来你已经有了一个可接受的答案?你不明白什么?@Barns当调用handleJson方法时,应用程序将崩溃,下面是错误消息:pastebin.com/RNLmtSV6Thanks,但当它调用handleJson时,应用程序再次崩溃,下面是错误消息:@misolo89当然,如果发生
异常
,那么你将向
handleJson()
传递一个空的
字符串。您应该使
handleJson()
相应地处理一个空的
字符串
,或者当您没有要处理的内容时甚至不调用
handleJson()
。谢谢,但是当它调用handleJson时,应用程序再次崩溃,下面是错误消息:@misolo89当然,如果发生
异常
,然后将一个空的
字符串
传递给
handleJson()
。您应该使
handleJson()
相应地处理一个空的
字符串
,或者在没有要处理的内容时甚至不调用
handleJson()