Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.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静态与非静态问题_Java_Android - Fatal编程技术网

Java Android静态与非静态问题

Java Android静态与非静态问题,java,android,Java,Android,我一直在尝试呼叫以下人员: public static void startfile() { Log.i("File Works", "working2 "); try { FileOutputStream fos = openFileOutput("sdcard/sdtext.txt", MODE_WORLD_WRITEABLE); } catch (FileNotFoundException e) { // TODO Auto-gen

我一直在尝试呼叫以下人员:

public static void startfile() {
    Log.i("File Works", "working2 ");

    try {
        FileOutputStream fos = openFileOutput("sdcard/sdtext.txt", MODE_WORLD_WRITEABLE);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
我得到一个错误,告诉我“不能从ContextWrapper类型对非静态方法openFileOutput(String,int)进行静态引用”

所以我搜索了那个错误,发现了

我实施了以下措施:

public static void startfile(Trackfile O) {
    Log.i("File Works", "working2 ");
    O.nonstatstartfile();
}

public void nonstatstartfile(){
    Log.i("File Works", "nonStat");
    try {
        FileOutputStream fos = openFileOutput("sdcard/sdtext.txt", MODE_WORLD_WRITEABLE);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
}

当我从另一个类调用startfile时,得到一个空指针错误。我需要发送什么参数来避免空指针错误?

您可以通过下面的活动传递
上下文

public static void startfile(Context c) {
    Log.i("File Works", "working2 ");

    try {
        FileOutputStream fos = c.openFileOutput("sdcard/sdtext.txt", MODE_WORLD_WRITEABLE);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

您可以通过如下活动传递
上下文

public static void startfile(Context c) {
    Log.i("File Works", "working2 ");

    try {
        FileOutputStream fos = c.openFileOutput("sdcard/sdtext.txt", MODE_WORLD_WRITEABLE);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
将此方法添加到类中,并毫无问题地使用它。 若您在主类中需要它,请在对象上使用它

将此方法添加到类中,并毫无问题地使用它。
如果您在主类中需要它,请在对象上使用它。

那么,如果您在其中调用一个非静态方法,为什么您需要这个方法是静态的?您是从另一个类使用它吗?是的,我是从另一个类调用的。。。public void startfile(){Log.i(“文件工作”、“工作2”);尝试{FileOutputStream fos=openFileOutput(“sdcard/sdtext.txt”,MODE_WORLD_WRITEABLE)}catch(FileNotFoundException e){//TODO自动生成的catch块e.printStackTrace();}你可以把这个方法放在那个类中,使它成为非静态的,并且毫无问题地使用它,如果你在主类中需要这个方法,你可以通过那个类的对象调用它……编辑你的答案来添加代码,更容易阅读:)那么,如果你在其中调用一个非静态方法,为什么你需要这个方法是静态的呢?你是从一个静态的角度使用它吗其他类?是的,我是从另一个类调用的,然后…public void startfile(){Log.I(“文件工作”,“工作2”);尝试{FileOutputStream fos=openFileOutput(“sdcard/sdtext.txt”,MODE_WORLD_WRITEABLE);}catch(FileNotFoundException e){//TODO自动生成的catch块e.printStackTrace();}您可以将此方法放在该类中,使其成为非静态的,并且可以毫无问题地使用它。如果您在主类中需要此方法,您可以按该类的对象调用它…编辑您的答案以添加代码,这更易于阅读:)…并在活动中使用
startfile(this)
。(活动扩展了上下文)。您还应该为文件名使用绝对路径…并在活动中使用
startfile(this)
。(活动扩展了上下文)。您还应该为文件名使用绝对路径。