我想从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方法中一样。但我不知道如何合并代码。
有人可以帮助我实现这个目标吗?
由于
答案 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;
}
希望,它再一次适合你。