今天下午我使用谷歌的Gson来解析Json,我有很多乐趣,但我在这里写这段代码:
public class Fetcher extends AsyncTask<String, Void, JsonReader> {
@Override
protected JsonReader doInBackground(String... urlString) {
try {
URL url = new URL(urlString[0]);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
JsonReader jReader = new JsonReader(reader);
return jReader;
} catch(MalformedURLException malformedEx) {
Log.e("malformed url: ", "here are the details: ", malformedEx);
} catch(IOException ioEx) {
Log.e("IO problem: ", "here are the details: ", ioEx);
} catch(Exception generalEx) {
Log.e("an exception we did not expect: ", "here are the details: ", generalEx);
}
//return statement here
}
}
显然会抱怨我错过了一个return语句,但是我不知道该返回什么因为我需要将JsonReader放在try块中而我不能创建一个空的那个,因为那里不是它的构造函数。我没想到我会要求这个。想法。
答案 0 :(得分:2)
如果你想捕捉异常(确定你想要?),那么return null
可能是正确的选择。
答案 1 :(得分:1)
由于该方法需要返回一些内容并且try / catch可能会失败,所以如果无法访问try / catch 中的return语句,则需要返回一些内容。
如果尝试失败,您应该return null;
或想要返回的内容。
答案 2 :(得分:1)
我认为最好的选择应该是
public class Fetcher extends AsyncTask<String, Void, JsonReader> {
@Override
protected JsonReader doInBackground(String... urlString) {
JsonReader jReader = null;
try {
URL url = new URL(urlString[0]);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
jReader = new JsonReader(reader);
} catch(MalformedURLException malformedEx) {
Log.e("malformed url: ", "here are the details: ", malformedEx);
} catch(IOException ioEx) {
Log.e("IO problem: ", "here are the details: ", ioEx);
} catch(Exception generalEx) {
Log.e("an exception we did not expect: ", "here are the details: ", generalEx);
} finally {
// CLOSE YOUR STREAMS
}
return jReader;
}
}
但是在使用它之前不要忘记测试jreader,否则你会得到一个空指针异常。
if (jReader!=null) {
//do something
}
注意:显式返回null;不是一个好的编程实践,也不是两个回复陈述。