2013-08-24 52 views
0

感覺真的很愚蠢,不知何故,我有一種感覺,我應該通過「這個」作爲「上下文」的論據,但老實說,這個整體概念對我來說是新的,因爲它對我來說很困惑,我寧願知道100%是什麼,爲什麼在我開始我無休止的語法錯誤追捕之前。作爲Context參數傳入文件I/O方法的內容是什麼?

前幾天我問了一個問題,關於如何使用文件輸入/輸出流將類對象的ArrayList的內容寫入文件以便在應用程序啓動時進行檢索。基本上,我想保存輸入的值。直到我意識到在調用保存和檢索方法時必須傳遞一個Context時,我纔對代碼感到非常自信。那時候,我意識到我不知道背景是什麼打擊了我......所以是的。

這是我的方法: 創建文件(我猜):

private static void updatePickThreeList(Context mC){ 
    FileOutputStream stream = null; 

    try{ 
     stream=mC.openFileOutput(PICK_THREE_NUMBERS,Context.MODE_PRIVATE); 
     ObjectOutputStream dout = new ObjectOutputStream(stream); 
     dout.writeObject(pickThreeNumbers); 
     stream.getFD().sync(); 
     stream.close(); 
     dout.flush(); 

    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 

檢索數據(我希望):

   private static void getPickThreeList(Context mC){ 
    FileInputStream stream = null; 
    try{ 
     stream=mC.openFileInput(PICK_THREE_NUMBERS); 
     ObjectInputStream din = new ObjectInputStream(stream); 
     pickThreeNumbers = (ArrayList<PickThreeNumbers>) din.readObject(); 
     stream.getFD().sync(); 
     stream.close(); 
     din.close(); 

    }catch(IOException e){ 
     e.printStackTrace(); 
    }catch(ClassNotFoundException e1){ 
     e1.printStackTrace(); 
    } 
} 

而且我認爲我可以調用的第一個方法將ArrayList保存到文件中,然後調用第二種方法來簡單地將保存的值加載到數組中。順便說一句,使用的陣列和其它值:

static List<PickThreeNumbers> pickThreeNumbers = new ArrayList(); 
final static String PICK_THREE_NUMBERS="pick_three_numbers"; 

所以,每響應我原來的問題,這兩種方法都需要在上下文中傳遞,而Java是是相當堅定的關於獲取該上下文(去圖),所以當我調用updatePickThreeList(Context)時,究竟作爲「上下文」進入了什麼?

在此先感謝 - 我是一個非常欣賞編程noob。

+0

只是挑剔:),我認爲''flush()'應該發生在'close()'流之前。 –

回答

2

所以當我調用updatePickThreeList(Context),究竟是什麼作爲「上下文」?

一些延伸Context的類的實例。根據您撥打此代碼的位置,可能是ActivityService

順便說一下,使用靜態數據成員時請注意,所以不要引入內存泄漏。

此外,請在後臺線程上執行磁盤I/O(例如,AsyncTaskIntentService)。

+0

當有人提到SO上的Context時,您會收到通知嗎? ;-) –

+2

@PaulBurke:幸運的是,否則,否則垃圾郵件發送者會在我的防禦中使用該漏洞... :-) – CommonsWare

+0

所以...我應該傳入「this」以指向存儲列表的活動類?另外,你是什麼意思是「後臺線程」?對不起,我在這一切都很新... –

相關問題