我正在尝试从服务器检索一些图片,以便用结果填充GridView。为此,我有一个自定义适配器,其中我想下载图片并将其设置为ImageButton小部件的位图。我正在使用Volley库中的ImageRequest,并且还需要基本身份验证,这是我无法弄清楚如何做的。这是自定义适配器的代码:
public View getView(int position, View convertView, ViewGroup parent) {
final boolean loaded = false;
currentMarque = getItem(position);
String url = "https://uriToServer";
currentMarque.setImageUrl(url + currentMarque.getId());
if (convertView == null)
convertView = LayoutInflater.from(getContext()).inflate(R.layout.brand_gridcell_layout, parent, false);
currentImageBtn = (ImageButton) convertView.findViewById(R.id.brandImageBtn);
ImageRequest request = new ImageRequest(currentMarque.getImageUrl(),
new Response.Listener<Bitmap>()
{
@Override
public void onResponse(Bitmap bitmap)
{
currentImageBtn.setImageBitmap(bitmap);
}
}, 0, 0, null,
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError arg0)
{
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
String auth = "Basic " + Base64.encodeToString((GlobalVariables.getInstance().getWS_KEY()+":").getBytes(),
Base64.NO_WRAP);
headers.put("Authorization", auth);
return headers;
}
};
GlobalVariables.getInstance().addToRequestQueue(request);
return convertView;
}
问题是ImageRequest是一个异步请求,我们不知道何时会得到响应,因此 ConvertView 在呼叫结束前返回。有没有办法等到请求完成?
答案 0 :(得分:0)
您应该使用ImageRequest
而不是NetworkImageView
。使用后者,您可以在相应网址的图像到来时放置图像。它完美地适用于适配器并使用缓存。看看这个例子:
进入xml
:
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/networkImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:background="#000000"/>
进入java类:
NetworkImageView _networkImageView = (NetworkImageView) findViewById(R.id.networkImageView);
_networkImageView.setImageUrl(url, AppControllerImage.getInstance().getImageLoader());
_networkImageView.setDefaultImageResId(R.drawable.notfound);
_networkImageView.setErrorImageResId(R.drawable.notfound);
以下网站与我发布的示例略有不同,但您可以获得更多信息:http://cypressnorth.com/mobile-application-development/setting-android-google-volley-imageloader-networkimageview/