2016-08-25 255 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] 

可能是不正确的索引会导致错误发生。