如何在 gomobile 中发出 HTTP 请求

问题描述

我正在试用 gomobile 并希望在应用程序启动之前将一些数据发送到网络服务器。我正在使用 gomobile 中包含的基本示例应用程序模板。我在main的开头添加代码

func main() {
    client := &http.Client{}
    req,_ := http.NewRequest("GET","X.X.X.X:8000/log",strings.NewReader("TEST"))
    client.Do(req)
    app.Main(func(a app.App) {
                ...
        }
        ....
}

应用程序在启动时立即崩溃。我确定我在 GET 请求中使用了正确的 IP。
HTTP请求的方式有什么问题吗?
(我在 Android 上测试)

解决方法

http.NewRequest 可能返回错误,因为您的网址不包含架构 (http/https),因此无效。将 "X.X.X.X:8000/log" 更改为 "http://X.X.X.X:8000/log"

此外,您还应该处理错误,即使只是调用 panic,因为这会告诉您哪里出了问题。

func main() {
    client := &http.Client{}
    req,err := http.NewRequest("GET","http://X.X.X.X:8000/log",strings.NewReader("TEST"))
    if err != nil {
        panic(err)
    }

    _,err = client.Do(req)
    if err != nil {
        panic(err)
    }

    app.Main(func(a app.App) {
                ...
        }
        ....
}

此外,在 android 上进行测试时,您的恐慌很可能最终会出现在您可以使用 adb logcat 看到的系统日志中(但不能 100% 确定 gomobile 应用是否是这种情况)。>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...