Java “如何修复android错误”;类上下文中的方法openFileInput不能应用于给定类型;2.
在我的Java “如何修复android错误”;类上下文中的方法openFileInput不能应用于给定类型;2.,java,android,Java,Android,在我的MainActivity.java中,我试图根据代码打开一个文件。但是当运行代码时 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act
MainActivity.java
中,我试图根据代码打开一个文件。但是当运行代码时
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
我甚至无法理解错误的含义。消息所指的“参数列表”是什么 正如@LunarWatcher所说,openFileInput需要1个参数。所以 而不是这个
FileInputStream fis = getBaseContext().openFileInput("hello.txt",Context.MODE_PRIVATE);
FileInputStream fis = getBaseContext().openFileInput("hello.txt",Context.MODE_PRIVATE);
用这个
FileInputStream fis = openFileInput("hello.txt");
FileInputStream fis = openFileInput("hello.txt", MODE_PRIVATE);
正如@MuhammadKashifArif所提到的: 而不是这个
FileInputStream fis = getBaseContext().openFileInput("hello.txt",Context.MODE_PRIVATE);
FileInputStream fis = getBaseContext().openFileInput("hello.txt",Context.MODE_PRIVATE);
用这个
FileInputStream fis = openFileInput("hello.txt");
FileInputStream fis = openFileInput("hello.txt", MODE_PRIVATE);
没关系
Context就是Context,而getBase Context仍然是与其他所有内容相同的上下文,与在活动中使用this
相比,调用getBaseContext不会改变上下文的类型。静态访问MODE\u 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\u PRIVATE
。在它前面被称为静态导入。Context.MODE_PRIVATE
与静态导入MODE_PRIVATE
之间的唯一区别在于,您不必键入这些字符。无论您如何称呼该方法,它都不存在
至于编译错误,它基本上说您提供的参数比方法所需的多。您还应该在调用该方法时看到红色警告,但您看到的是编译错误,因为您试图编译生成,而调用了未知方法。在
FileInputStream
中只传递文件名而不是文件名和模式。在使用stackoverflow中的其他代码之前,请尝试阅读注释,这似乎是可行的。因此,出于某些原因,我猜示例代码是错误的。除非您知道如何使用它,并且有明确的理由这样做,否则不要使用getBaseContext()
。只需直接在活动
上调用openFileInput()
,这是一个上下文
,甚至更好。我不知道getBaseContext()
做了什么……是的,这个例子是错误的openFileInput()
只接受字符串
参数。openFileInput不接受两个参数。以前是这样,但现在不一样了。openFIleOutput接受两个参数SlunarWatcher是的,您是对的。我没有集中精力。