我需要在字符串中下载一个JSON,我几乎可以肯定代码没有错,但是有些奇怪...
public boolean downloadJSON(){
json="";
try{
URL url = new URL(theURL);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = in.readLine()) != null) {
json+=line;
}
in.close();
return true;
} catch (Exception e) {
return false;
}
}
基本上它正确地打开缓冲区,它正确地读取json并将其存储在变量中,它关闭流,然后它返回true并且......它随机跳转到返回false而没有意义,而while它在返回false时异常e是... null Oo 这绝对没有意义,请帮助我D:!!!
最后我用这种方式解决了它:
public boolean downloadJSON(){
json="";
boolean out=false;
try{
URL url = new URL(theURL);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = in.readLine()) != null) {
json+=line;
}
in.close();
out = true;
} catch (Exception e) {
}
return out;
}
如果第一个doesen工作,不要问我这是怎么回事,在我看来我仍然认为第一个应该有效:S
ADD:对于Stephen C:
public boolean downloadJSON(){
json="";
try{
URL url = new URL("http://fapfapfap.altervista.org/conapo/conapo.php?n="+numeroPagina);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = in.readLine()) != null){json+=line;}
in.close();
return true;
}catch (Exception e) {
Log.d("ERRORE", e.getStackTrace().toString());
return false;
}
}
答案 0 :(得分:0)
试试这个:
URL url = new URL(theURL);
StringBuilder jsonResults = new StringBuilder();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStreamReader in = new InputStreamReader(conn.getInputStream());
// Load the results into a StringBuilder
int read;
char[] buff = new char[1024];
while ((read = in.read(buff)) != -1) {
jsonResults.append(buff, 0, read);
}
System.out.println(jsonResults.toString());
答案 1 :(得分:0)
....我的代码毫无例外地跳到了错误
仍然没有任何意义
你误解了证据:
public boolean downloadJSON(){
json = "";
try {
URL url = new URL(theURL);
BufferedReader in = new BufferedReader(
new InputStreamReader(url.openStream()));
String line;
while ((line = in.readLine()) != null) {
json += line;
}
in.close();
return true;
} catch (Exception e) {
return false; // HERE
}
}
当您收到我已标记为// HERE
的声明时。它已经发生>>因为<<抛出了一些例外。毫无疑问。我们不知道它是什么异常,因为你的代码只是抛弃了异常对象。
(尝试在e.printStacktace();
之前添加return false;
我怀疑它要么是MalformedURLException
,要么FileNotFoundException
......但可能是其他事情。
那么你在这段代码中的错误是什么?
1)捕获Exception
是个坏主意。问题是它抓得太多了。除了捕获您(可能)此时预期的异常外,它还将捕获所有意外的异常。例如,任何NPE或AIOOPE或代码中(假设的)错误引起的任何错误。
在这种情况下,您应该抓住此时可能出现的异常;即IOException
。
2)捕获异常并丢弃堆栈跟踪会使诊断问题变得困难。只建议"壁球"如果你知道(并且可以证明)异常将是你所期望的那样的例外。
3)在同一段代码中同时执行1)和2)这是一个非常糟糕的主意。
4)构建一个像这样的字符串是低效的(或者非常低效......如果你正在加载一个非常大的文档)。使用StringBuilder
要好得多。
但请注意,4)是您遇到问题的外围因素。