java try catch阻止返回什么

时间:2014-07-06 16:45:46

标签: java android try-catch

今天下午我使用谷歌的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块中而我不能创建一个空的那个,因为那里不是它的构造函数。我没想到我会要求这个。想法。

3 个答案:

答案 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;不是一个好的编程实践,也不是两个回复陈述。