Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “如何修复android错误”;类上下文中的方法openFileInput不能应用于给定类型;2._Java_Android - Fatal编程技术网

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是的,您是对的。我没有集中精力。