0

我想从我创建的方法中返回 String 类型的数据。Eclipse 说需要在 try catch 块之后指定返回类型...当我这样做时,Eclipse 然后告诉我我需要将字符串数据声明为局部变量...这里出了什么问题?

private String ReadData() {
    try {
        FileInputStream fis = null;
        InputStreamReader isr = null;
        String data = null;
        fis = KVOContact.this.openFileInput("data.txt");
        isr = new InputStreamReader(fis);
        char[] inputBuffer = new char[fis.available()];
        isr.read(inputBuffer);
        data = new String(inputBuffer);
        isr.close();
        fis.close();

    } catch (IOException ioe) {
        Log.e("KVOContact", "IOError" + ioe);
    }
    return data;
}
4

5 回答 5

8

你在块data内声明。try它超出了该块之外的范围。

可以将声明移到try块之前 - 但我个人认为完全删除块可能更有意义catch,并声明该方法可以 throw IOException。您还应该关闭您的FileInputStreamand InputStreamReaderinfinally块,以便在抛出异常时不会让它们保持打开状态。

于 2012-06-11T09:37:21.023 回答
3

data变量仅限于try子句的范围。而是在外面声明它try

于 2012-06-11T09:36:58.917 回答
1

您需要对代码进行一些更改:

private String ReadData() {
    String data = null;
    try {
        FileInputStream fis = null;
        InputStreamReader isr = null;        
        fis = KVOContact.this.openFileInput("data.txt");
        isr = new InputStreamReader(fis);
        char[] inputBuffer = new char[fis.available()];
        isr.read(inputBuffer);
        data = new String(inputBuffer);
        isr.close();
        fis.close();
    } catch (IOException ioe) {
        Log.e("KVOContact", "IOError" + ioe);
    }
    return data;
}

您需要声明一个不在 try 块内的 String 数据变量,否则在 try catch 块之外不会看到它。

于 2012-06-11T09:37:50.893 回答
1

是的,您还需要return在 catch 部分使用语句,研究以下代码,

private String ReadData() 
{
     try
     {
     .
     .
     . 
     return stringVariable;
     }
     catch ( IOException ioe )
     {
         Log.e("KVOContact", "IOError" + ioe);
         return NULL;
     }
}
于 2012-06-11T09:39:24.300 回答
0

将 return data 语句放在 try 块本身内。

仅当 try 块内发生某些错误时才会调用 catch ,否则会执行 try 并将调用返回到它的来源。

于 2012-06-11T09:37:35.373 回答