在我的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
我甚至无法理解错误的含义。什么'参数列表'是指的消息?
答案 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");