如何修复android错误“类Context中的方法openFileInput不能应用于给定的类型; 2

时间:2017-01-12 20:06:11

标签: java android

在我的MainActivity.java内,我正在尝试根据代码given here打开文件。但是在运行代码时

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Button button = (Button) findViewById(R.id.btn1);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(getBaseContext(), "YOUR TEXT HERE", Toast.LENGTH_LONG).show();
                // Perform action on click

                FileInputStream fis = getBaseContext().openFileInput("hello.txt", Context.MODE_PRIVATE);
                InputStreamReader isr = new InputStreamReader(fis);
                BufferedReader bufferedReader = new BufferedReader(isr);
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    sb.append(line);
                }
            }
        });

    }
}

我收到以下错误:

Error:(27, 55) error: method openFileInput in class Context cannot be applied to given types;
required: String
found: String,int
reason: actual and formal argument lists differ in length

我甚至无法理解错误的含义。什么'参数列表'是指的消息?

2 个答案:

答案 0 :(得分:1)

正如@MuhammadKashifArif所说:

而不是这个

FileInputStream fis = getBaseContext().openFileInput("hello.txt",Context.MODE_PRIVATE);

使用此

FileInputStream fis = openFileInput("hello.txt", MODE_PRIVATE);

没关系。

上下文是上下文,getBase上下文仍然是与其他所有内容相同的上下文,与在活动中使用this相比,调用getBaseContext不会更改上下文的类型。静态访问MODE_PRIVATE和使用import static

之间没有区别

我不确定究竟是什么时候改变了(我不会查看每个版本的android来检查),但它是openFileOutput,它接受​​两个参数,一个字符串和一个整数。

openFileInput现在只需要一个参数。所以:

FileInputStream fis = /*Some context here if you are outside an activity.*/openFileInput("hello.txt");

加载:

FileOutputStream fos = /*some context if outside activity.*/openFileOutput("hello.txt", Context.MODE_PRIVATE);

我还想再次澄清一个事实,即你是否在一个活动中调用getBaseContext,getApplicationContext或调用this / SomeActivity.this并没有什么区别。上下文类本身不会改变,字段是相同的。在MODE_PRIVATE之前编写Context.称为静态导入。 Context.MODE_PRIVATE和静态导入MODE_PRIVATE之间的唯一区别只是您不必键入这些字符。无论你怎么称呼它,方法都不存在

至于编译错误,它基本上表示你提供的参数多于方法所需的参数。您还应该看到对方法调用的红色警告,但是当您调用未知方法时尝试编译构建时,您看到的是编译错误。

答案 1 :(得分:0)

正如@LunarWatcher所说,openFileInput需要1个参数。所以,

而不是这个

FileInputStream fis = getBaseContext().openFileInput("hello.txt",Context.MODE_PRIVATE);

使用此

FileInputStream fis = openFileInput("hello.txt");