Cómo mostrar la imagen (matriz de bytes) de JSON en imageView … Factory devuelve null

Estoy luchando con este problema de 2 días ya … Estaba publicando antes, pero no de las respuestas estaban bien.

Mi problema es: estoy intentando convertir el byte [] en imagen. El byte [] viene de JSON y está en este formato:

"4oCwUE5HDQoaCgAAAAA1JSERSAAAAfwAAAFAIBgAAADBHwqrDsAAAAFAIBgAAADBHwqrDsAAAAAAWSFlzAAAAJwAAACcBKgnigJhPAAAgAElEQVR4xZPCrMK9ecWSZcOZfcOfw7c5w5vCvW / CqXp …" va para otras 100 líneas.

Clase para mostrar las imágenes:

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(); } } 

}

Y el 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... 

No tengo ni idea de por qué mi bitmap devolver null. He intentado muchas maneras diferentes pero nada trabaja.

¡Es por eso que necesito ayuda mal! ¡¡¡Gracias!!!

Para futura referencia

 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[] byteArray = Base64.decode(jsonObject.getString("image"), Base64.DEFAULT) ; Bitmap bmp1 = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); //Bitmap bitmap = Bitmap.createScaledBitmap(bmp1, 120, 120, false); map.put("id", id); map.put("name", name); map.put("image", bmp1); playersList.add(map); //Log.d("SHOW PLAYER LIST: " ,playersList.toString()); } 

Convertir mapa de bits en matriz de bytes: –

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray();

Convertir matriz de bytes a mapa de bits: `Bitmap bmp = BitmapFactory.decodeByteArray (byteArray, 0, byteArray.length); ImageView image = (ImageView) findViewById (R.id.imageView1);

Image.setImageBitmap (bmp); `

  Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray , 0, byteArray .length); iv.setImageBitmap(bitmap ); 

Este código simplemente decodificará la imagen de la matriz de bytes.

  • No se pueden enviar datos de JSON desde Android al servidor ROR
  • Obtener el valor de cadena de un objeto de matriz JSON en Java
  • Android: pasa un objeto JSON entre fragmentos
  • Obtener valor específico de JSONArray
  • Los objetos Json de Android / Java cuentan
  • Cómo analizar las matrices json anidadas en un solo objeto en android
  • Android json analizar y almacenar en la base de datos
  • Configuración de la tarea asincrónica para cargar Json en una vista de lista
  • Cómo analizar JSON en Android
  • ¿Cómo manejar parámetros que pueden ser ARRAY u OBJECT en Retrofit en Android?
  • Deserialización de tipos genéricos con GSON
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.