Android的静态VS非静态问题

Android的静态VS非静态问题

问题描述:

我一直在试图拨打以下几点:Android的静态VS非静态问题

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(); 
    } 
} 

我得到的告诉我说:“不能让一个静态参考非静态方法openFileOutput错误(字符串,INT )从类型的ContextWrapper“

所以我搜索了该错误,发现this site

我实现了这个:

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。我需要发送什么参数以避免空指针错误?

+1

那么,为什么你需要这个方法是静态的,如果你在里面调用一个非静态方法? – Egor

+0

你从另一个班级使用它吗? – Markonato

+0

是的,我从另一个类的电话 –

您可以从活动通过context像下面

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(); 
    } 
+1

...并在您的活动中使用'startfile(this)'。 (Activity扩展上下文)。你也应该为你的文件名使用绝对路径。 –

public 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(); 
    } 

此方法添加到您的类,并使用它没有问题。 如果您在主类中需要它,请将其用于对象。