2016-08-25 194 views
-1

在我的數據存儲類我已經使用GSON保存稱爲setTeam字符串數據和檢索數據稱爲getTeamGson數據存儲和檢索。存儲爲字符串,檢索作爲整數

public class DataStorage { 
     private static final String TEAM = "Teams"; 
     private static final String TEAM_INFO = "teaminfo"; 
     private static Gson gson = new Gson(); 


     public static void setTeam(MainActivity context, Collection<User> teams) { 
      String usersJson = gson.toJson(teams); 
      SharedPreferences.Editor editor = context.getSharedPreferences(TEAM_INFO, Context.MODE_PRIVATE).edit(); 
      editor.putString(TEAM, usersJson); 
      editor.apply(); 
     } 

     public static ArrayList<User> getTeam(Context context){ 
      SharedPreferences prefs = context.getSharedPreferences(TEAM_INFO, Context.MODE_PRIVATE); 
      String usersJson = prefs.getString(TEAM, "[]"); 
      return gson.fromJson(usersJson, new TypeToken<ArrayList<User>>(){}.getType()); 
     } 

    } 

然後我做了一個對於每個保存在隊叫User類我的JSON數據庫。因此,對於每個setTeam有一個teamNamegameWongameLost

public class User implements Serializable { 

    private String teamName; 
    private int gameWon; 
    private int gameLost; 

    public void setName(String name) {this.teamName = name;} 
    public String getName() {return teamName;} 

    public void setGameWon(int wonHome){this.gameWon = wonHome;} 
    public int getGameWon(){return gameWon;} 

    public void setGameLost (int gameLoss){this.gameLost = gameLoss;} 
    public int getGameLost(){return gameLost;} 
} 

在我創建了一個雙串ArrayList其中包括一些數字的主要活動。

private final String[][] dataTeams = new String[30][3]; 

所以在dataTeams雙數組中有30個團隊與他們的gameWon和gameLost。 gameWon和gameLost是數字串。

因此,現在我試圖將dataTeams中的任何內容保存到Json數據庫中。

User c = new User(); 
c.setName(dataTeams[i][0]); 
c.setGameWon(Integer.parseInt(dataTeams[i][2])); 
c.setGameLost(Integer.parseInt(dataTeams[i][3])); 

teams.add(c); 
DataStorage.setTeam(this, teams); 

我已經成功完成了,但是當我檢索數據;

ArrayList<User> users = DataStorage.getTeam(this); 
     String [] teams = new String[30]; 
     for(int i = 0; i < 30; i++) { 
      teams[i] = users.get(i).getName() + " W:" + users.get(i).getGameWon() + " L:" + users.get(i).getGameLost(); 
     } 

行getName是所有球隊正確的,但他們的getGameWon和getGameLost均爲0,這是不是有什麼在雙陣列dataTeams

所以,現在我仍堅持是否JSON的I類之間很由DataStorage當我解析爲int

c.setGameWon(Integer.parseInt(dataTeams[i][2])); 
c.setGameLost(Integer.parseInt(dataTeams[i][3])); 

或者我解析整數錯誤沒有保存字符串。

在dataTeam的數據是

Team W L 
Atlanta  60 22 
Boston  40 42 
Brooklyn 38 44 
Charlotte 33 49 
Chicago  50 32 
Cleveland 53 29 
Dallas  50 32 
Denver  30 52 
Detroit  32 50 
Golden State 67 15 
Houston  56 26 
Indiana  38 44 
L.A. Clippers 56 26 
L.A. Lakers  21 61 
Memphis  55 27 
Miami  37 45 
Milwaukee 41 41 
Minnesota 16 66 
New Orleans 45 37 
New York 17 65 
Oklahoma City 45 37 
Orlando  25 57 
Philadelphia 18 64 
Phoenix  39 43 
Portland 51 31 
Sacramento 29 53 
San Antonio 55 27 
Toronto  49 33 
Utah  38 44 
Washington 46 36 
+0

你能分享你的JSON數據嗎? –

+0

@PhilipRollins當然,我已經將它添加到底部 – SimranTea

+1

我認爲你的數據不是JSON,它是一個TSV(製表符分隔值)。所以你可以使用一些CSV庫來讀取它的效率。 – Minh

回答

0

你的宣言:

private final String[][] dataTeams = new String[30][3]; 

你設定數據的邏輯:

c.setGameWon(Integer.parseInt(dataTeams[i][2])); // << [i][1] 
c.setGameLost(Integer.parseInt(dataTeams[i][3])); // << [i][2] 

可能是不正確的索引會導致錯誤發生。