2011-09-29 101 views
0

我一直在試圖撥打以下幾點: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

是的,我從另一個類的電話 –

回答

4

您可以從活動通過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擴展上下文)。你也應該爲你的文件名使用絕對路徑。 –

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

此方法添加到您的類,並使用它沒有問題。 如果您在主類中需要它,請將其用於對象。