2012-03-15 8 views
1

URLからリモートのJPGファイルを取得し、それをBitmapに入れたいと考えています。私はAndroid用に開発しています、私はマニフェスト上のインターネットとインターネットの許可を持っています。USERとパスワードを使用してURLからリモートJPGを取得する方法は?

問題は、URLにユーザーとパスワードが必要だということです。

私はパスワードなしでビットマップにリモート画像を取得する方法を知っている:

public static Bitmap getBitmapFromURL(String src) { 
    try { 
     URL url = new URL(src); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoInput(true); 
     connection.connect(); 
     InputStream input = connection.getInputStream(); 
     Bitmap myBitmap = BitmapFactory.decodeStream(input); 
     return myBitmap; 
    } catch (IOException e) {e.printStackTrace();} 
    return null; 
} 

と私はユーザー名とパスワードをURLからXML文字列を取得する方法を知っている:

public String getXML(String url){ 
    StringBuilder builder = new StringBuilder(); 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpResponse response; 
    try { 
     ((AbstractHttpClient) httpclient).getCredentialsProvider().setCredentials(
       new org.apache.http.auth.AuthScope(null,-1), 
       new org.apache.http.auth.UsernamePasswordCredentials(MagazineStatus._username, MagazineStatus._password)); 

     response = httpclient.execute(new HttpGet(url)); 
     StatusLine statusLine = response.getStatusLine(); 
     if(statusLine.getStatusCode() == HttpStatus.SC_OK) { 
      try {     
       HttpEntity entity = response.getEntity(); 
       InputStream content = entity.getContent(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
       String line; 
       while ((line = reader.readLine()) != null) builder.append(line);   
      }catch(Exception ex) {Log.e("DBF Error",ex.toString());}     
     }else { 
      response.getEntity().getContent().close(); 
      throw new IOException(statusLine.getReasonPhrase()); 
     } 
    }catch(ClientProtocolException cpe) {Log.e("ClientProtocolException @ at FPT",cpe.toString());} catch(Exception ex) {Log.e("Exception at FETCHPROJECTASK",ex.toString());} 
    return builder.toString(); 
} 

ので、私は、XMLメソッドのように、USERとPASSWORDを使用して、URLからビットマップをダウンロードする必要があります。しかし、私は魔法のコードをマージする方法を知らない。

私はこれを達成するために誰かを助けることができますか?

おかげ

+0

画像はどこにホストされていますか? flicker.com? –

+0

XML文字列のサンプル出力を質問自体に入れることができますか?それは助けになるだろう... –

答えて

1

これは実際には関係ありませんが、ここには示唆があります。 JPEGファイルではなくPNGファイルを使用することができます。これは、データが圧縮されているときにPNGの品質が損なわれないためです(AndroidでもPNGを使用することが好ましい)。このように、あなたが持っているビューはすべてのデバイスでほぼ同じに見えます。

0

は、私はhttpリクエストに次のヘッダーを挿入し、同様の問題があったが、それを解決するために: ヘッダー:認証 値:「基本 『+ Base64Coder.encodeString(ユーザー+』:」+ pass)

Base64Coderは、ユーザーの「:」+パス文字列をBase64形式に変換するのに役立つフリークラスです。インターネットのいくつかの場所からコードをダウンロードできます。

httpリクエストに新しいヘッダーを挿入する方法については、HttpURLConnectionの代わりにHttpPostとHttpGetオブジェクトを使用しました。私はそれがHttpURLConnectionで行うことができるかどうかわかりません。ヘッダーを設定するには、setHeaderメソッドを使用するだけです。

私は、httpgetの使用方法を示すリンクを含めています。 http://w3mentor.com/learn/java/android-development/android-http-services/example-of-http-get-request-using-httpclient-in-android/

0

同じタスクを使用してこれを行うことはできません。イメージを取得してビットマップを返す別のasyntask <>を作成する必要があります。私はあまりにも前にこれをやった。これにはこのコードを使用してください。

Bitmap image = null; 

    @Override 
    protected Bitmap doInBackground(String... params) { 
     try { 
// param[0] would be replaced with your image path. 
      image = BitmapFactory.decodeStream((InputStream)new URL(params[0]).getContent()); 
     } catch (MalformedURLException e) { 
      Log.e("MalformedURLException",e.toString()); 
     } catch (IOException e) { 
      Log.e("IOException",e.toString()); 
     }  
     return image;  
    } 

希望どおりに動作します。

関連する問題