3 回答

TA貢獻(xiàn)1804條經(jīng)驗 獲得超3個贊
你有兩個選擇,我會把選擇留給你。
共享首選項
這是Android獨有的框架,允許您在鍵值框架中存儲原始值(例如int,boolean,并且String嚴(yán)格來說,String這不是原始的)。這意味著您為值指定一個名稱,例如“homeScore”并將值存儲到此鍵。
SharedPreferences settings = getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("homeScore", YOUR_HOME_SCORE);
// Apply the edits!
editor.apply();
// Get from the SharedPreferences
SharedPreferences settings = getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
int homeScore = settings.getInt("homeScore", 0);
內(nèi)部存儲器
在我看來,這是你可能正在尋找的。您可以將任何想要的內(nèi)容存儲到文件中,這樣可以提供更大的靈活性。但是,該過程可能比較棘手,因為所有內(nèi)容都將存儲為字節(jié),這意味著您必須小心保持讀寫過程協(xié)同工作。
int homeScore;
byte[] homeScoreBytes;
homeScoreBytes[0] = (byte) homeScore;
homeScoreBytes[1] = (byte) (homeScore >> 8); //you can probably skip these two
homeScoreBytes[2] = (byte) (homeScore >> 16); //lines, because I've never seen a
//basketball score above 128, it's
//such a rare occurance.
FileOutputStream outputStream = getApplicationContext().openFileOutput(FILENAME, Context.MODE_PRIVATE);
outputStream.write(homeScoreBytes);
outputStream.close();
現(xiàn)在,您也可以查看外部存儲,但我不建議在這種特殊情況下,因為外部存儲可能不會在以后存在。(注意,如果你選擇它,它需要一個權(quán)限)

TA貢獻(xiàn)1830條經(jīng)驗 獲得超3個贊
OP正在要求一個“保存”功能,這不僅僅是在程序的執(zhí)行過程中保存數(shù)據(jù)(你必須為應(yīng)用程序做任何事情。)
我建議將數(shù)據(jù)保存在SD卡上的文件中,這樣您不僅可以在以后調(diào)用它,還允許用戶將設(shè)備作為外部驅(qū)動器安裝在自己的計算機上,并獲取數(shù)據(jù)以便在其他地方使用。
所以你真的需要一個多點系統(tǒng):
1)實施onSaveInstanceState()。在這個方法中,你傳遞了一個Bundle,它基本上就像一個字典。在捆綁包中存儲盡可能多的信息,以便在完全停止的位置重新啟動應(yīng)用程序。在您的onCreate()方法中,檢查傳入的包是否為非空,如果是,則從包中恢復(fù)狀態(tài)。
2)實施onPause()。在此方法中,創(chuàng)建一個SharedPreferences編輯器并使用它來保存下次啟動應(yīng)用程序所需的任何狀態(tài)。這主要包括用戶的偏好(因此名稱),但與應(yīng)用程序的啟動狀態(tài)相關(guān)的任何其他內(nèi)容也應(yīng)該在此處。我不會在這里存儲分?jǐn)?shù),只是你需要重啟應(yīng)用程序的東西。然后,在onCreate()沒有包對象時,使用SharedPreferences接口調(diào)用這些設(shè)置。
3a)對于像分?jǐn)?shù)這樣的東西,你可以按照上面的Mathias的建議并將分?jǐn)?shù)存儲在返回的目錄中g(shù)etFilesDir(),使用openFileOutput()等。我認(rèn)為這個目錄是應(yīng)用程序的私有目錄,并且存在于主存儲器中,這意味著其他應(yīng)用程序和用戶無法訪問數(shù)據(jù)。如果你沒問題,那么這可能就是你要走的路。
3b)如果您確實希望其他應(yīng)用程序或用戶可以直接訪問數(shù)據(jù),或者數(shù)據(jù)將非常大,那么SD卡就是您的選擇。選擇一個像com / user1446371 / basketballapp /這樣的目錄名,以避免與其他應(yīng)用程序發(fā)生沖突(除非您確定您的應(yīng)用程序名稱相當(dāng)獨特)并在SD卡上創(chuàng)建該目錄。正如Mathias指出的那樣,您應(yīng)首先確認(rèn)已安裝SD卡。
File sdcard = Environment.getExternalStorageDirectory();
if( sdcard == null || !sdcard.isDirectory()) {
fail("sdcard not available");
}
File datadir = new File(sdcard, "com/user1446371/basketballapp/");
if( !datadir.exists() && !datadir.mkdirs() ) {
fail("unable to create data directory");
}
if( !datadir.isDirectory() ) {
fail("exists, but is not a directory");
}
// Now use regular java I/O to read and write files to data directory
我建議為您的數(shù)據(jù)使用簡單的CSV文件,以便其他應(yīng)用程序可以輕松讀取它們。
顯然,您必須編寫允許“保存”和“打開”對話框的活動。我通常只是調(diào)用openintents文件管理器并讓它完成工作。但是,這要求您的用戶安裝openintents文件管理器以使用這些功能。

TA貢獻(xiàn)1786條經(jīng)驗 獲得超13個贊
在onCreate:
SharedPreferences sharedPref = getSharedPreferences("mySettings", MODE_PRIVATE);
String mySetting = sharedPref.getString("mySetting", null);
在onDestroy或等效:
SharedPreferences sharedPref = getSharedPreferences("mySettings", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("mySetting", "Hello Android");
editor.commit();
- 3 回答
- 0 關(guān)注
- 386 瀏覽
添加回答
舉報