So zeigen Sie ein Bild (Byte-Array) von JSON in imageView an… Factory gibt null zurück

Ich habe schon 2 Tage mit diesem Problem zu kämpfen ... Habe vorher gepostet, aber keine der Antworten war richtig.

Mein Problem ist: ich versuche, Byte [] in Bild umzuwandeln. Das Byte [] stammt von JSON und hat folgendes Format:

4oCwUE5HDQoaCgAAAA1JSERSAAAAfwAAAFAIBgAAADBHwqrDsAAAAAlwSFlzAAAAJwAAACcBKgnigJhPAAAgAElEQVR4xZPCrMK9ecWSZcOZfcOfw7c5w5vCvCvW

Klasse zum Anzeigen der Bilder:

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

}

Und der 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...

Ich habe überhaupt keine Ahnung, warum meine Bitmap null zurückgibt. Ich habe viele verschiedene Möglichkeiten ausprobiert, aber nichts funktioniert.

Deshalb brauche ich dringend Hilfe! Vielen Dank!!!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage