2017-08-15 4 views
0

Je réponse d'image json comme ceci:différence entre deux voies de conversion de JSON byteArray

"UserImage":[ 
255, 
216, 
255, 
224, 
0,.....] 

il y a deux façon que je fais cette réponse au tableau d'octets:

1 -

 JSONArray resultImage = result.getJSONArray("UserImage"); 
     byte[] byteUserImage = resultImage.toString().getBytes(); 
     hashUserImageMap.put(userId, byteUserImage); 

2-

  byte[] tmp=new byte[result.getJSONArray("UserImage").length()]; 
     for(int i=0;i<result.getJSONArray("UserImage").length();i++){ 
      tmp[i]=(byte)(((int)result.getJSONArray("UserImage").get(i)) & 0xFF); 
     } 
     hashUserImageMap.put(userId, tmp); 

deuxième façon que je pouvais convertir byteArray en bitmap:

byte[] arr = getMapInstance().get(name);     
Bitmap bitmap = BitmapFactory.decodeByteArray(arr, 0, arr.length); 

mais en première manière cette bitmap était nulle. Je veux savoir où est la déférence entre ces voies de remorquage?

Répondre

1

La première méthode appelle resultImage.toString.getBytes. Cela créera une chaîne JSON, puis vous donnera les valeurs ASCII pour chacun des caractères contenus dans ce fichier.

Pour "[42]" vous obtiendrez ces octets: [0x5B, 0x34, 0x32, 0x5D]. Ils ont tous tort et ils sont trop nombreux. Votre BitmapFactory le rejettera.

La deuxième méthode parcourt l'élément de tableau par élément, traite le nombre qui s'y trouve comme une valeur d'octet et construit un nouveau tableau de ces valeurs.

Pour "[42]" vous obtiendrez [0x2A] (qui est ce que vous voulez).