【发布时间】:2017-08-17 19:47:23
【问题描述】:
我是 android 和 java 的新手。我想获取一个 url 请求(结果是 JSON)并解析它(例如从 yahoo api 获取 JSON 天气)。 我复制 getStringFromUrl 函数,我知道我的函数 (setWeather) 有错误。请帮帮我。
public static String getStringFromURL(String urlString) throws IOException {
HttpURLConnection urlConnection;
URL url = new URL(urlString);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setReadTimeout(10000 /* milliseconds */);
urlConnection.setConnectTimeout(15000 /* milliseconds */);
urlConnection.setDoOutput(true);
urlConnection.connect();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream()));
char[] buffer = new char[1024];
String outputString;
StringBuilder builder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
builder.append(line).append("\n");
}
bufferedReader.close();
outputString = builder.toString();
return outputString;
}
public void setWeather (View view) throws IOException, JSONException {
String json = getStringFromURL("https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text='Esfahan')&format=json");
JSONObject jso = new JSONObject(json);
JSONObject query = jso.getJSONObject("query");
JSONObject result = query.getJSONObject("results");
JSONObject channel = result.getJSONObject("channel");
JSONObject windI = channel.getJSONObject("wind");
JSONObject location = channel.getJSONObject("location");
String last = "";
last = location.getString("city");
TextView tv = (TextView) findViewById(R.id.textView);
tv.setText(last);
}
当我在设备应用程序崩溃时运行此应用程序。 在 Android Monitor 上写是错误的:
【问题讨论】:
-
错误是:
codeat com.android.detf.testhttprequest.MainActivity.getStringFromURL(MainActivity.java:35) at com.android.detf.testhttprequest.MainActivity.setWeather(MainActivity.java: 50)code -
您需要在单独的线程上发出所有网络请求,然后您可以使用 UI 线程来更新 textview。
-
我说我是新手;请用代码解释我或更多解释。
-
@Amir MainActivity.java 第 50 行是哪一行?
标签: android json httpurlconnection