2

这是我关于stackoverflow的第一个问题。

我的问题是:我正在尝试将 byte[] 转换为图像。byte[] 来自 JSON,格式如下:

"4oCwUE5HDQoaCgAAAA1JSERSAAAAfwAAAFAIBgAAADBHwqrDsAAAAAlwSFlzAAAAJwAAACcBKgnigJhPAAAgAElEQVR4xZPCrMK9ecWSZcOZfcOfw7c5w5vCvW/CqXp...“它还有 100 行。

出现问题的代码:

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();
        BufferedHttpEntity bufferedEntity = new BufferedHttpEntity(httpEntity);
        // 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(bufferedEntity);

        // 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[] images = jsonObject.getString("image").getBytes();

                Bitmap btm = BitmapFactory.decodeByteArray(images, 0, images.length);
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                btm.compress(Bitmap.CompressFormat.PNG, 100, stream);
                byte[] byteArray = stream.toByteArray();

                Bitmap btm2 = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
                ImageView image = (ImageView) findViewById(R.id.image);
                image.setImageBitmap(btm2);

                map.put("name", name.toString());
                map.put("image", images.toString());

                Log.d("JSON OBJECTS:", jsonObject.toString());
                Log.d("WHATS IN MAP:", map.toString());

                playersList.add(map);

当然还有我在 LogCat 中遇到的错误:

SkImageDecoder:: Factory returned null.
java.lang.NullPointerException

它在这一行指出:

Bitmap btm2 = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

我已经进行了研究,但没有真正指出我所缺少的东西。有任何想法吗??

谢谢!!

4

2 回答 2

2
4oCwUE5HDQoaCgAAAA1JSERSAAAAfwAAAFAIBgAAADBHwqrDsAAAAAlwSFlzAAAAJwAAACcBKgnigJhPAAAgAElEQVR4xZ

PCrMK9ecWSZcOZfcOfw7c5w5vCvW/CqXp..." it goes for another 100 lines.

似乎不是一个byte[],而是一个Base64 字符串

所以尝试喜欢

String base64 = jsonObject.getString("image");
byte[] decodedString = Base64.decode(base64, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
image.setImageBitmap(decodedByte);

希望这对您有所帮助。

于 2013-10-29T14:33:34.627 回答
1
    **Your web service is the UTF-8 decoder**

String str=[Base64];
str = URLDecoder.decode(str, "UTF-8");
ImageView imgView.setImageBitmap(StringToBitMap(str));

public static Bitmap StringToBitMap(String image) {
        try {
            byte[] encodeByte = Base64.decode(image.getBytes(), Base64.DEFAULT);
            Bitmap bitmap = BitmapFactory.decodeByteArray(encodeByte, 0,
                    encodeByte.length);
            return bitmap;
        } catch (Exception e) {
            e.getMessage();
            return null;
        }
    }
于 2015-06-26T13:19:31.487 回答