2013-06-22 10 views
-2

J'ai besoin de stocker un tableau enum 2d dans une base de données sqlite sur Android, donc le moyen le plus simple semble être de convertir en chaîne (par exemple une chaîne CSV) pour stocker dans la base de données puis revenir lors de la récupération.Convertir un tableau 2D en chaîne et revenir en Java?

Comment puis-je faire cela en Java?

MyEnum[][] myArray; 

Merci

+0

http://stackoverflow.com/questions/229856/ways-to-save-enums-in-database –

+0

merci Sean mais c'est plus la conversion du tableau 2d à une chaîne et de retour je suis préoccupé par – fxfuture

+0

pourquoi toutes les downvotes? – fxfuture

Répondre

2

Si vous voulez convertir l'ensemble 2d-ensemble en une seule chaîne, vous pouvez utiliser un codage de type CSV, mais vous devez protéger un caractère spécial (typ. Les virgule-séparateur) afin de ne pas gâcher la séparation des champs. Un moyen rapide (et sale?) De le faire serait d'utiliser enc = URLEncoder.encode(val, "UTF-8") sur chaque valeur, puis de retour avec val = URLDecoder.decode(enc, "UTF-8").

Vous aussi utiliser un autre séparateur (par exemple \n) pour séparer les lignes:

String write(MyENum[][] myArray) { 
    String res = ""; 
    for (int iRow = 0; iRow < myArray.length; iRow++) { 
     for (int iCol = 0; iCol < myArray[iRow].length; iCol++) 
      res += URLEncoder.encode(myArray[iRow][iCol].name(), "UTF-8")+","; 
     res += "\n"; 
    } 
} 

(je vous laisse à ne pas ajouter le "," supplémentaire à la fin de chaque ligne). Puis, à lire en arrière:

MyEnum[][] read(String res) { 
    String[] rows = res.split("\n"); 
    MyEnum[][] myArray = new MyEnum[rows.length][]; 
    for (int iRow; iRow < rows.length; iRow++) { 
     String[] cols = rows[iRow].split(","); 
     myArray[iRow] = new MyEnum[cols.length]; 
     for (int iCol = 0; iCol < cols.length; iCol++) 
      myArray[iRow][iCol] = MyEnum.valueOf(URLDecoder.decode(cols[iCol], "UTF-8")); 
    } 
    return myArray; 
} 

C'est basé sur le fait qu'il ya des name() et valueOf() méthodes disponibles dans votre ENUM pour faire la transformation, comme @ sean-f vous a montré dans le poste qu'il a lié.

+0

Merci beaucoup! Fonctionne parfaitement. Une petite faute de frappe à noter - cette ligne devrait être String [] cols = rows [iRow] .split (","); – fxfuture

+1

Merci, j'ai édité ma réponse. Heureux que ça a aidé! :) – Matthieu

Questions connexes