-1

私はImageViewに画像を設定したいImageViewに取り組んでいますが、そのImage(バイト配列)はWebサーバーから直接来ています..概念は次のとおりです:

1) さまざまなパラメータを Web サーバーに送信していますが、Web サーバーはその特定の ID の画像を送信しています (URL ではなく画像のみ)。

2) SD カードに保存せずにその画像を ImageView に直接表示したいので、ユーザーが他の ID 関連の画像を見たいときはいつでも画像がサーバーから直接取得され、最後に保存されません。

[編集]

サーバーから値を取得し、byte[] で返します

     static BufferedReader in=null;

byte[] result_image;
          DefaultHttpClient httpClient = new DefaultHttpClient();

        HttpPost httpPost = new HttpPost(uri1);
        if(list!=null)
        {

        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(list);
        httpPost.setEntity(formEntity);

        }
         //URI uri=httpPost.getURI();
        HttpResponse httpResponse = httpClient.execute(httpPost);
        in = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
        StringBuffer sb = new StringBuffer("");
        String line = "";
       // String NL = System.getProperty("line.separator");
        while ((line = in.readLine()) != null) {
              sb.append(line +" "); //sb.append(line +NL);
        }
        in.close();



       result_image = String.valueOf(sb).getBytes();

}
    catch(UnsupportedEncodingException e)
    {
        String err = (e.getMessage()==null)?"Cant connect to server":e.getMessage();
        Log.e("Network Error:",err); 
    }
    catch (MalformedURLException e) {
        String err = (e.getMessage()==null)?"Malformed Exception":e.getMessage();
        Log.e("Malformed Exception:",err); 

     } 
     catch(Exception ex)
     {
        // Log.i("Exception,ex", ex.getMessage());
         String err = (ex.getMessage()==null)?"NetworkConnectionException":ex.getMessage();
         Log.e("NetworkConnectionException:",err); 
     }
    finally {

        if (in != null) {
            try {
                    in.close();
             } catch (Exception ex) {
                 String err = (ex.getMessage()==null)?"Excepion":ex.getMessage();
                 Log.e("Exception:",err); 
            }
        }

ここでresult_imageはバイト[]であり、このバイト[]を使用してデコードし、ビットマップで表示しています..助けてください.

4

6 に答える 6

3

あなたはこのように使うことができます

URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
imageView.setImageBitmap(myBitmap);
于 2012-04-17T06:27:12.657 に答える
0

ネットからロードしていることを考えると、おそらく画像を遅延ロードしたいと思うでしょう。これには多くの例があります。それらの多くは画像をSDカードに保存しますが、画像を何らかのメモリ構造に適合させて保存する必要があります。

于 2012-04-17T06:31:53.210 に答える
0

decodeByteArray()メソッドは、これを行うための推奨される方法です。うまくいかない場合は、次のコードのように手動でデコードできます。

URL yourl = new URL(src);
HttpURLConnection connection = (HttpURLConnection) yourl.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();                                
bis = new BufferedInputStream(input,int);                   
baf = new ByteArrayBuffer(int);

int current = 0;                        
while ((current = bis.read()) != -1) {                  
baf.append((byte) current);
}

上記のコードが代替案を示してくれることを願っています。ハッピーコーディング。

于 2012-04-17T07:18:50.560 に答える
0

まず、urlをImageViewのDataSourceとして設定することはできません。URL から応答を取得し、バイトに変換する必要があります。

次に、画像を SDCARD に保存したくない場合は、ImageView でバイト配列を割り当てるだけです。ここでは、画像を SDCARD に保存していません。バイト配列は、アプリが RAM でアクティブになるまで残ります。

コードは以下の通りです。ここで、URL はhttp://domain/test.jpgのような画像を指しています 。

URL myFileUrl =null;          
        try {
             myFileUrl= new URL(url);
        } catch (MalformedURLException e) {
            return false;
        }
        try {
             HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
             conn.setInstanceFollowRedirects(false);
             conn.setDoInput(true);
             conn.connect();                       
             InputStream is = conn.getInputStream();
             Bitmap bitmap = BitmapFactory.decodeStream(is);
             image.setImageBitmap(bitmap);
             return true;
        } catch (IOException e) {
            System.out.println("error="+e.getMessage());
            e.printStackTrace();        
            return false;
        }
于 2012-04-17T06:37:59.940 に答える
0

これを試して:

Bitmap bMap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
image.setImageBitmap(bMap);
于 2012-04-17T06:26:59.307 に答える