【发布时间】:2016-11-30 07:23:20
【问题描述】:
我正在使用 Android Studio,我花了几个小时尝试在我的 MainActivity.java 文件中执行一个简单的 HTTP 请求,并尝试了多种方法,并且看到了许多关于该主题的网页,但无法弄清楚出去。
当我尝试 OkHttp 时,我收到一个关于无法在主线程上执行此操作的错误。现在我正在尝试这样做:
public static String getUrlContent(String sUrl) throws Exception {
URL url = new URL(sUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.connect();
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String content = "", line;
while ((line = rd.readLine()) != null) {
content += line + "\n";
}
return content;
}
我将该方法直接放在 MainActivity.java 中,我的点击事件从另一个也在 MainActivity.java 中的方法执行它:
try {
String str = getUrlContent("https://example.com/WAN_IP.php");
displayMessage(str);
}
catch(Exception e){
displayMessage(e.getMessage());
}
但是现在没有崩溃,我可以看出在“BufferedReader”开头的行上抛出了一个异常,但是 e.getMessage() 是空白的。
我是 Android Studio 和 java 的新手,所以请善待并帮助我解决这个非常基本的问题。最终我需要向服务器发送请求,似乎 OkHttp 是最好的方法,但我没有在 Android Studio 中找到在线任何地方记录的 OkHttp 的“Hello World”。
【问题讨论】:
-
看看this的回答。无法在主线程中打开 HTTP 连接(这就是您遇到第一个错误的原因),使用
AsyncTask是处理此问题的好方法 -
我觉得你高估了我对 Android Studio 和 java 的了解。我确定该链接显示了一个很好的答案,但我不知道如何处理代码。我不知道该放在哪里。我在 AsyncTask 的文档中看到它应该被添加到主线程,但我不知道该怎么做,或者这意味着什么。
标签: java http android-studio okhttp3