Java: Создать Drawable из строки UTF8 - PullRequest
1 голос
/ 12 августа 2011

У меня есть следующий код:

public void onSuccess(String response) {
    Log.i("EOH",response);
    Drawable d = null;
    Object content=response.getBytes();
    InputStream is = (InputStream)content;
    d = Drawable.createFromStream(is, "src");

    ImageView captcha = (ImageView)findViewById(R.id.imageView2);
    captcha.setImageDrawable(d);
}

Вот строка ответа, которую я получаю (из LogCat):

08-12 11: 33: 52.223:INFO / EOH (10244): PNG

08-12 11: 33: 52,223: INFO / EOH (10244): 08-12 11: 33: 52,223: INFO / EOH (10244): ������ IHDR������d������2������% Wé��������IDAThíéSgÇÏÙM² \ R 08-12 11: 33: 52.223: INFO / EOH (10244): * ч= ¨xß- ¥: Ni} Ñ? ª¯:} ¡S + µ3ötÇàÕ Äî # $ a7ÙÝd¾H '
£ ² $ 8ÝÏ «äÙßîóï {��¦, ²2) Ë��¦, ² Ê2)Ë��¦,² e2) Ë|, ² @ ¬dg¡ä <ð ° BsìJvVHÖpüõÐí ° I · хн ÷ 1 × ÁJkÅâbQ§3PÅKãôÊp) ¬¬ {Ao ° ¡0ªÄR¬> MÎý0uýËâ / | ÖÊÌÊöðèCUWl »CEAC ~ ¸ÈIVRKþ> wKÑgX] góY¼ ¢
12³²Å {zB \ o «& 0��t] oìŹ ¢ ³ß} §êªYXiêw; �� ä 08-12 11: 33: 52.223: INFO / EOH (10244): I.} #Bh + »¹ = ÒNF3Ø} -ÞSíë Aá¯N]*ô5q·¿^¾0þÅÝW.sÌ$§åÍJ.¦^ïtl;P¸@¸tãOèPr~D 08-12 11:33:52.223: INFO/EOH(10244): fÝÆFÄ ?¸1û��¬¡KÓdMÔÈ)��pìaç~��_Ø@lðU|¸ïkâ²g·\³ .©¤+�� .[kóÙqû¥Ò#Îç¼g2G¥ñË?^j½:}=(cÎCé«d!ÔóÉpºqLPrÞШÎxiÔHòE¾© H#}ÂÀ{ ��tDHýQcÁö¬J¯ÅÝÀÔ¤ TYuÖ *, H_EÕ3μÝ | ïÉkM # Q} Â_¤Ê ©% |¤ · Ê Аа> Á4yμÁ ^} 3Ø × Пу / © RLwDáov] \ IaÔIϧÐy | 7ÜÖÅ ÷4q® # ¨sШ <~ + t; FF¡Ô% ÄtÐiÆ> ä $ 9; nÏq¦øùóçs} Âç¡ä, GtFGènWj½rºlXôóªð½ & 3qofê 08-12 11: 33: 52.223: INFO / EOH (10244): I¤[6¯klÕÖr�� qºÊê {* ôÀNǶl â¨I®!¬© %ÃÝ|/ðþÙýèáÙÃèßq¤*brPýK=S��wÂmAiÔE:wséKϧXÖ-"����GxV;B¨ÙtÚÓÜâ=UJ¤¢½*c{±ä��dM+KQ9UFcô¨<~yòZ*G~6¥UÖJ;n©q��øÌu4SA7ßFRp£½ÆMºl¸5©+CqP£0ª.{Ó3_ÅýSÝg­ÈüÒ%¤äÊ@%]qÖÛúôiºöÓô!Ñß'ìá>YÞ4ó#!t°pßËøt¦>/i»ý6{s*1ÓÍ÷f¶üÜs¨tËh×dbÅ ´ 46!OtõÈêî))(��ÓeéÂVJ~EK.{y;î4°u lÝâv¯ÅóMÙ×Sǫ̀4Q¢¢&p®M̬Ä_gî§DlwlÙÇíÎ:��³¬·U÷ÇÄ^ôÇ5Ðö49ÉÂtAjeeÕcj��¾WèlXLy)ïÛk.µøÅÀlrNÓu'Éù¬ë.z¦¶?öüN¸MÖä¬EE,^��ÅW½¬¥Zkó­ßRßwçÛÆå ��J£U¶ÊT£®ëÊ��°9ü4´*NóË 5¶uM;³Ròe|XÑ��è>Õÿ;ßO\JÌ��@[¸CÓµåuºVQÞ_\IÌòª ŬVÜj¤qÒA'Ý # úÿüóO × uAO4ʼ²Êñ¨ø¡fÖ {Áe��SLY0eÀe��SLY0eÀe��SLY0eÀe§ ~) l1 + ��������IEND®B`

Как видите, я пытаюсь преобразовать строку с именем 'response' в объект Drawable.Проблема в том, что изображение всегда пустое!

Кто-нибудь знает, как я могу это исправить?

Заранее большое спасибо,


Редактировать:

Это тоже не сработало; (

@Override
public void onSuccess(String response) {
    Log.i("EOH",response);          
    ByteArrayInputStream bis = new ByteArrayInputStream(response.getBytes());
    Bitmap bm=BitmapFactory.decodeStream(bis);

    ImageView imgView = (ImageView)findViewById(R.id.imageView2);
    imgView.setImageBitmap(bm);
}

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Попробуйте это:

BitmapDrawable drawable = BitmapFactory.decodeFile(response);

Или вы можете сделать следующее, если вам не нужно, чтобы оно было нарисовано.

Bitmap bm = BitmapFactory.decodeFile(response);
ImageView captcha = (ImageView)findViewById(R.id.imageView2);
captcha.setImageBitmap(bm);

EDITED

Для сетевых файлов вы можете использовать это:

BitmapFactory.decodeStream(is)
0 голосов
/ 12 августа 2011

Вот полная функция, которую я использую (не работает ...):

private void captchaLoad() {
         AsyncHttpClient myClient = new AsyncHttpClient();
         PersistentCookieStore myCookieStore = new PersistentCookieStore(context);
         myClient.setCookieStore(myCookieStore);
         RequestParams params = new RequestParams();

         myClient.post("http://www.extremetech.com/wp-content/uploads/2011/08/amd-logo-106x59.jpg", params, new AsyncHttpResponseHandler() {
            @Override
            public void onStart() {

            }

            @Override
            public void onSuccess(String response) {
                Log.i("EOH",response);

                ByteArrayInputStream bis = null;
                try {
                    bis = new ByteArrayInputStream(response.getBytes("UTF8"));
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Bitmap bm=BitmapFactory.decodeStream(bis);

                ImageView imgView = (ImageView)findViewById(R.id.imageView2);
                imgView.setImageBitmap(bm);
            }

            @Override
            public void onFailure(Throwable e) {

            }
        });
     }
...