Set<Entry<String, Object>> entryset = full_map.entrySet();
Iterator<Entry<String, Object>> it = entryset.iterator();
while (it.hasNext()) {
String key = (String) it.next().getKey();
System.out.println(key);
Object obj = full_map.get(key);
JSONObject obj1 = (JSONObject) obj;
URL url_2 = new URL("http://ws.audioscrobbler.com/2.0/?method=track.getsimilar&artist=" + obj1.getString("artist") + "&track="+obj1.getString("track") + "&limit=10&api_key=XYZ&format=json");
System.out.println(url_2);
URLConnection url_reader_2 = url_2.openConnection();
BufferedReader reader_2 = new BufferedReader(new InputStreamReader((url_reader_2.getInputStream()), Charset.forName("UTF-8")));
// System.out.println(reader_2);
String iterator_2 = " ";
/* while((iterator_2 = reader_2.readLine()) != null)
{
JSONObject jsonObject_2 = new JSONObject(iterator_2);
System.out.println(jsonObject_2);
}*/
}
上面的代码生成了一个无限循环。有什么建议??
我尝试使用keySet()
而不是entrySet()
,它会得到相同的结果。
虽然如果我删除:
BufferedReader reader_2 = new BufferedReader(new InputStreamReader(( url_reader_2.getInputStream()),Charset.forName("UTF-8")));
它不会进入无限循环。
答案 0 :(得分:0)
这肯定不是无限循环的情况。更可能的情况是你对urlConnection的openInputStream操作需要很长时间而不是超时。
答案 1 :(得分:0)
我不认为这是一个无限循环。没有可能无限循环,问题应该是URL连接或其他东西,正如你提到的,当你删除它,它没关系。无论如何,您可以在log
之前和之后以及循环迭代之后BufferedReader
来确保问题来自此行或循环。
答案 2 :(得分:0)
我也认为这段代码不是一个无限循环。尝试设置以下超时参数:
url_reader_2.setConnectTimeout(2000);
此外,如果网站上有很多点击,那么它可以坚持处理这么多tcp连接