Comment afficher une image (tableau d'octets) à partir de JSON dans imageView... Usine retourne null

Je suis aux prises avec ce problème 2 jours... déjà Été poster avant, mais non les réponses la droite.

Mon problème est: je suis en train de convertir byte[] dans l'image. Le byte[] vient de JSON et c'est dans ce format:

"4oCwUE5HDQoaCgAAAA1JSERSAAAAfwAAafaibgaaadbhwqrdsaaaaalwsflzaaaajwaaaccbkgnigjhpaaagaeleqvr4xzpcrmk9ecwszcozfcofw7c5w5vcvw/CqXp..." il va pour un autre 100 lignes.

Classe pour l'affichage des images:

public class PlayersListActivity extends Activity {
//URL to make request
private static String URL = "url goes here";
private static int userID;
ArrayList<HashMap<String, Object>> playersList;
ListView playerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_view);
Bundle extras = getIntent().getExtras();
userID = extras.getInt("id");
initLayout();
}
private void initLayout() {
playerView = (ListView) findViewById(R.id.list);
playersList = new ArrayList<HashMap<String, Object>>();
playerView.setAdapter(new SimpleAdapter(PlayersListActivity.this, playersList, R.layout.activity_players_list, null, null));
playerView.setDividerHeight(0);
}
@Override
protected void onResume() {
if (!ConnectivityStatus.isNetworkAvailable(getApplicationContext())) {
Toast.makeText(PlayersListActivity.this, R.string.network_failed,
Toast.LENGTH_SHORT).show();
} else {
playerView.setAdapter(null);
new PlayersLoadTask().execute();
}
super.onResume();
}
ProgressDialog pDialog;
class PlayersLoadTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(PlayersListActivity.this);
pDialog.setMessage("Reading data");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
playersList.clear();
}
@Override
protected String doInBackground(String... arg0) {
try {
ArrayList<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
parameters.add(new BasicNameValuePair("request", "getPlayers"));
parameters.add(new BasicNameValuePair("clubid", Integer.toString(userID))); //TODO: you'll need to change this to the Id from the user
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(PlayersListActivity.URL);
httpPost.setEntity(new UrlEncodedFormEntity(parameters, "UTF-8"));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
//if this is null the web service returned an empty page
if(httpEntity == null) //response is empty so exit out
return null;
String jsonString = EntityUtils.toString(httpEntity);
//again some simple validation around the returned string
if(jsonString != null && jsonString.length() != 0) //checking string returned from service to grab id
{
JSONArray jsonArray = new JSONArray(jsonString);
for(int i=0; i< jsonArray.length(); i++)
{   
HashMap<String, Object> map = new HashMap<String, Object>();
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
int id = jsonObject.getInt("id");
String name = jsonObject.getString("name");
byte[] image = jsonObject.getString("image").getBytes();
String base64 = jsonObject.getString("image");
try {
BitmapFactory.Options op=new BitmapFactory.Options();
op.inSampleSize=8;
Bitmap yourSelectedImage = BitmapFactory.decodeByteArray(image,0,image.length);
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
yourSelectedImage.compress(Bitmap.CompressFormat.PNG, 100, baos);
//this will convert image to byte[] 
byte[] byteArrayImage = baos.toByteArray(); 
//this will convert byte[] to string
String encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);
if (encodedImage != null) {
ImageView imgView = (ImageView) findViewById(R.id.image);
imgView.setImageBitmap(yourSelectedImage);
}
} catch (Exception e) {
Log.d("Exception", e.toString());
}
//map.put("id", id);
map.put("image", base64.toString());
map.put("name", name);
//Log.d("JSON OBJECTS:", jsonObject.toString());
//Log.d("WHATS IN MAP:", map.toString());
playersList.add(map);
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
Log.e("ERROR SOMEWHERE!!!! " , e.toString());
}
return null;
}
protected void onPostExecute(String file_url) {
if(playersList.size() == 0 ) {
Toast.makeText(PlayersListActivity.this, "No players in a list" , Toast.LENGTH_SHORT).show();
} else {
playerView.setAdapter(new PlayerListAdapter (PlayersListActivity.this, playersList, R.layout.activity_players_list, new String[] {"id", "image", "name"}, new int[] {R.id.player_list_id, R.id.image, R.id.name, }));
}
pDialog.dismiss();
} 
}

}

Et le LogCat:

 D/skia(3513): --- SkImageDecoder::Factory returned null
D/skia(3513): --- SkImageDecoder::Factory returned null
E/BitmapFactory(4399): Unable to decode stream: java.io.FileNotFoundException: /4oCwUE5HDQoaCgAAAA1JSERSAAAAfwAAAFAIBgAAADBHwqrDsAAAAAlwSFlzAAAAJwAAACcBKgnigJhPAAAgAElEQVR4xZPCrMK9ecWSZcOZfcOfw7c5w5vCvW/CqXpLV...

Je n'ai aucune idée de pourquoi mon image Bitmap de retourner la valeur null. J'ai essayé beaucoup de différentes manières, mais rien ne fonctionne.

C'est pourquoi j'ai besoin d'aide mal! Merci!!!

Ok. Mais j'ai aussi essayé avec de la Ficelle, mais il n'a pas travaillé.
êtes-vous d'obtenir l'encodage en base 64 chaîne de il ou elle retourne null
Tu veux dire quelque chose comme: ByteArrayOutputStream flux = new ByteArrayOutputStream(); byte[] byteArray = stream.toByteArray(); String base64 = Base64.encodeToString(byteArray, 0); Elle renvoie null.
pensez donc, Chaîne base64 = jsonObject.getString("image"); cette chaîne est vide
Chaîne base64 est de retour cette 4oCwUE5HDQoaCgAAAA1JSERSAAAAfwAAa...Ewq5CYOKAmg==

OriginalL'auteur Jakubee | 2013-11-04