2016-03-14 70 views
0

歡迎大家! 我正在編程Anroid上的手機遊戲。 我真的很想知道如何保存玩家數據。 這將是一款可以在不同設備上運行而不會丟失數據的遊戲。Android - 儲蓄玩家數據 - 3個不同選項的比較

  1. 使用SharedPreferences
  2. 使用的JSONObject,JSONArray,並保存到文件中的內部存儲,並把它上傳到外部服務器
  3. 的SQLite,MySQL的

,你會選擇什麼?每個選項的優缺點是什麼?

我想保存的數據。例如:

  1. 排行榜
  2. 生活
  3. 法力的步驟
  4. 計數
  5. 級人物的
  6. 數額的金錢
  7. 以及更多...
+0

我覺得解釋更多關於玩家數據來增強人們爲您提供更好,更定製的答案將是有益的。 – sark9012

+0

我編輯了一個問題。擡頭。 –

+0

所有這些信息都可以包含在Player對象中。 –

回答

0

SharedPreferences應該去爲這樣的數據量小的方式。在這個例子中,通過SQLite使用它們有很多好處。

我不鼓勵使用外部服務器,因爲我個人不希望我的遊戲需要上網玩遊戲。

+0

但是應用程序需要註冊/登錄玩家的互聯網訪問權限。外部服務器就像備份服務器。 –

+0

在這種情況下,您可以使用它,但不依賴於此。使用外部服務器進行某種備份,因此用戶可以切換到不同的設備並傳輸進度,但也請務必使用SharedPrefs在本地保存副本,因爲不良的用戶體驗會導致無法在沒有互聯網連接的情況下玩遊戲。 – Vucko

+0

是的,我知道:)所以你更喜歡SharedPreferences,是嗎?例如,我登錄到我的應用程序,並從服務器上下載一些數據。我把這些數據存入SharedPreferences文件,我可以通過所有的應用程序對它進行操作? –

0

這取決於會有多少玩家數據。但是除非有很多玩家數據,否則我會建議使用共享偏好,尤其是如果有像Player對象這樣簡單的東西,或者一系列Player對象。這將覆蓋它。

對於玩家列表,您可以使用類似下面的內容,並且如果您只想保存1,則將該列表的任何引用更改爲Player對象。如果您擁有大量數據,玩家或需要您可能希望使用SQLLite的額外安全性。

public class PlayerPrefs { 

    private static final String PLAYERS_PREF_FILE = "PLAYERS_PREF_FILE"; 
    private static final String PLAYERS = "PLAYERS"; 

    private static SharedPreferences getPrefs(){ 
     final Context context = ApplicationData.getAppContext(); 
     return context.getSharedPreferences(PLAYERS_PREF_FILE, Context.MODE_PRIVATE); 
    } 

    public static List<Player> getPlayers() { 
     final Gson gson = new Gson(); 
     Type listType = new TypeToken<ArrayList<Player>>() {}.getType(); 
     SharedPreferences prefs = getPrefs(); 
     String players = prefs.getString(PLAYERS, null); 
     if (players == null){ 
      return new ArrayList<Player>(); 
     } 
     return gson.fromJson(players, listType); 
    } 

    public static void setPlayers(List<Player> players) { 
     final Gson gson = new Gson(); 
     if (players != null) { 
      final SharedPreferences prefs = getPrefs(); 
      SharedPreferences.Editor editor = prefs.edit(); 
      editor.putString(PLAYERS, gson.toJson(players)); 
      editor.apply(); 
     } 
    } 
} 

此外,你需要在你的搖籃文件中的以下內容:

compile 'com.google.code.gson:gson:2.5' 
+0

現在不會有多人遊戲。一名球員 - 一臺設備。我願意保存外部數據,因爲如果我在智能手機上玩遊戲,現在我想在平板電腦上玩遊戲,則必須從外部服務器下載數據。 –

+0

然後這是一個完全不同的問題。如果您希望從外部加載並從集中位置訪問,則需要在服務器上設置Web服務,並至少爲Player對象提供get和set服務。 –

+0

但是,暫時一直到設置完成爲止,爲了在會話中保持該數據,我建議您使用我在那裏的解決方案。 –