Fla*_*h99 5 android universal-image-loader
我在一个需要获取授权源图像的应用程序中使用通用图像加载器.
到目前为止,我已经使用自己的类扩展了URLConnectionImageDownloader类,并使用我自己的实现方法覆盖了getStreamFromNetwork方法,该实现方法在URLConnection对象中设置了授权标头:
public class authURLConnectionImageDownloader extends URLConnectionImageDownloader {
@Override
public InputStream getStreamFromNetwork(URI imageUri) throws IOException {
String auth = Base64.encodeToString(("username" + ":"+"psswd").getBytes(), Base64.NO_WRAP);
URLConnection conn = imageUri.toURL().openConnection();
conn.setRequestProperty("Authorization", "Basic " + auth);
conn.setConnectTimeout(DEFAULT_HTTP_CONNECT_TIMEOUT);
conn.setReadTimeout(DEFAULT_HTTP_READ_TIMEOUT);
return new FlushedInputStream(new BufferedInputStream(conn.getInputStream(), BUFFER_SIZE));
}
Run Code Online (Sandbox Code Playgroud)
并设置我的ImageLoader ...
imageLoader = ImageLoader.getInstance();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(MainActivity.this)
.imageDownloader(new authURLConnectionImageDownloader())
.build();
imageLoader.init(config);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我无法让它工作.图像未下载.但更重要的是,我在getStreamFromNetwork()中放了一个断点,它永远不会被击中?我究竟做错了什么?
luk*_*kle 12
我这样实现了它:
byte[] toEncrypt = (username + ":" + password).getBytes();
String encryptedCredentials = Base64.encodeToString(toEncrypt, Base64.DEFAULT);
Map<String, String> headers = new HashMap();
headers.put("Authorization","Basic "+encryptedCredentials);
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
...
.extraForDownloader(headers)
.build();
Run Code Online (Sandbox Code Playgroud)
创建自己的ImageDownloader:
public class AuthDownloader extends BaseImageDownloader {
public AuthDownloader(Context context){
super(context);
}
@Override
protected HttpURLConnection createConnection(String url, Object extra) throws IOException {
HttpURLConnection conn = super.createConnection(url, extra);
Map<String, String> headers = (Map<String, String>) extra;
if (headers != null) {
for (Map.Entry<String, String> header : headers.entrySet()) {
conn.setRequestProperty(header.getKey(), header.getValue());
}
}
return conn;
}
}
Run Code Online (Sandbox Code Playgroud)
并将其设置为配置:
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.discCacheExtraOptions(600, 600, CompressFormat.PNG, 75, null)
.imageDownloader(new AuthDownloader(getApplicationContext()))
.build();
ImageLoader.getInstance().init(config);
Run Code Online (Sandbox Code Playgroud)
我最终设法使它工作......
我使用了库 .jar 以及示例附带的源代码,并对其进行了调试。我发现它从未访问我的 URLConnectionImageDownloader 派生类,并且始终使用父类。
因此,查看我的代码,发现我正在使用默认 URLConnectionImageDownloader 类的先前活动中设置另一个图像加载器。
现在我已经创建了一个应用程序类并设置了一次 ImageLoader(如示例应用程序中所示),并将配置设置为使用我的新 authURLConnectionImageDownloader 类。现在我所有的活动都使用这个 ImageLoader 并且它可以工作。
| 归档时间: |
|
| 查看次数: |
2946 次 |
| 最近记录: |