[英]Load images and checkbox in a HorizontalScrollView
我得到以下按钮的onClick命令。 但是当我调用它时,什么也没有出现:
public void onClick(View v) {
Log.d("debug", "before loadGutschein");
loadGutschein();
ViewFlipperVino.setDisplayedChild(3);
layout_number = 3;
Log.d("debug", "after loadGutschein");
bottomAudioLogosLayout.postDelayed(new Runnable() {
DisplayMetrics metrics = getActivity().getResources().getDisplayMetrics();
int width = metrics.widthPixels;
@Override
public void run() {
Log.d("debug", "couponsout=" + coupons);
if (coupons != null) {
int coupSize = coupons.size();
final int itemWidth = (width / coupSize) - 5;
for (int i = 0; i < coupSize; i++) {
Coupon coupon = coupons.get(i);
if (coupon.getImage() != null) {
final CheckBox cb = new CheckBox(getActivity());
final ImageView iv = new ImageView(getActivity());
iv.setScaleType(ScaleType.CENTER_INSIDE);
LayoutParams linearLayoutParams = new LayoutParams();
iv.setLayoutParams(linearLayoutParams);
cb.setLayoutParams(linearLayoutParams);
bottomAudioLogosLayout.addView(iv);
bottomAudioLogosLayout.addView(cb);
ImageUtil.loadImage(coupon.getImage(), iv, -1, -1, "", false);
}
}
}
}
}, 200);
}
============ LoadGutschein方法:
private void loadGutschein() {
ServiceProxy.createWebServiceTask(getActivity(), new RemoteCallListener() {
@Override
public void onRemoteCallError(String response) {
Log.e("error", "onRemoteCallError is ==>" + response);
}
@Override
public void onRemoteCallComplete(Object response) {
Log.d("debug", "response is = " + response + "\t" + response.getClass());
coupons = (Coupons) response;
Log.d("debug", "coupons = " + coupons);
}
@Override
public void onNoInternetError() {
Log.e("error", "onNoInternetError");
}
@Override
public void onNoAccess() {
Log.e("error", "onNoAccess");
}
}, true, true).invokeGetCoupons();
}
=========我的日志记录:
08-13 14:36:11.382: D/debug(17576): gutscheinName= e
08-13 14:36:11.382: D/debug(17576): gutscheinHN= d
08-13 14:36:11.382: D/debug(17576): gutscheinCash= 50
08-13 14:36:11.382: D/debug(17576): before loadGutschein
08-13 14:36:11.445: D/debug(17576): after loadGutschein
08-13 14:36:11.515: I/WEB-SERVER-CLIENT GET :(17576): http://developer.weinco.de/api/v1/getCoupons?
08-13 14:36:11.648: D/debug(17576): couponsout=null
08-13 14:36:11.742: D/debug(17576): response is = [Coupon [Name=Rabatt, Code=321, GueltigBis=2014-09-01, Typ=absolut, Wert=10, GueltigAb=2011-09-01, Gueltig=alle]] class com.weinco.webservice.entity.Coupons
08-13 14:36:11.742: D/debug(17576): coupons = [Coupon [Name=Rabatt, Code=321, GueltigBis=2014-09-01, Typ=absolut, Wert=10, GueltigAb=2011-09-01, Gueltig=alle]]
我不明白为什么如果来自Web服务的优惠券接受响应的值,则postDelayed(logcat中的Couponsout)中的优惠券值为null。 任何想法,我怎么能解决这个问题?
我不明白为什么如果来自Web服务的优惠券接受响应的值,则postDelayed(logcat中的Couponsout)中的优惠券值为null。
我认为出现问题的原因是您使用了从Web服务返回的数据的方式。 在onClick
回调中,您将启动获取数据的任务(并在任务完成事件onRemoteCallComplete
的回调中设置结果),然后安排onRemoteCallComplete
后运行Runnable
(也许您可以解释为什么恰好在onRemoteCallComplete
后发布Runnable
)。 如果任务花费了200毫秒以上的时间,怎么办,依赖于coupons
变量的Runnable
失败,因为获取新数据的任务尚未完成?
可能您没有初始化coupons
因此在运行Runnable
时很有可能为null
。 仅当您确定从Web服务获取数据的过程完成时才应运行Runnable
的run方法中的代码( onRemoteCallComplete
似乎是个好地方,但我不知道您的完整代码)。
另外,您应该给LayoutParams
一些大小,而不仅仅是实例化它,例如:
LayoutParams linearLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.