如何使用USER和Password从URL获取远程JPG?

时间:2012-03-15 16:47:46

标签: java android httpclient inputstream

我想从URL获取远程JPG文件并将其放入Bitmap。我正在为Android开发,我在手机上有互联网和清单上的互联网许可。

问题是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;
}

我知道如何使用USER AND PASSWORD从URL获取XML String:

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

所以,我需要从URL下载一个Bitmap,但是使用USER和PASSWORD,就像在XML方法中一样。但我不知道如何合并代码。

有人可以帮助我实现这个目标吗?

由于

3 个答案:

答案 0 :(得分:1)

这不是真的有关,但这是一个建议。您可能想要使用PNG文件而不是JPEG文件,因为PNG在压缩数据时不会失去它的质量(Android也更喜欢使用PNG)。这样,您拥有的视图在所有设备上看起来都非常相似。

答案 1 :(得分:0)

我遇到了类似的问题,为了解决这个问题,我在http请求中插入了以下标题: 标题:授权 值:“Basic”+ Base64Coder.encodeString(user +“:”+ pass)

Base64Coder是一个免费的类,它帮助我将用户+“:”+传递字符串转换为Base64格式。您可以从Internet上的多个位置下载代码。

关于如何在http请求中插入新标头,我使用了HttpPost和HttpGet对象,而不是HttpURLConnection。我不知道是否可以用HttpURLConnection完成。要设置标题,您只需使用方法setHeader。

我包含一个显示如何使用httpget的链接。 http://w3mentor.com/learn/java/android-development/android-http-services/example-of-http-get-request-using-httpclient-in-android/

答案 2 :(得分: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;       
    }

希望,它再一次适合你。