我正在创建一个应用程序,在该应用程序中,我通过 JSON 从 Web 服务器获取带有 id 的礼物图像。当我点击任何礼物图像时,它会进入下一页,显示该图像的所有信息(通过 JSON 从 Web 服务器获取带有 id 的图像信息)。
问题是:当我点击页面上的任何礼物图片以查看其相关信息时,它每次都会获取最后一个礼物图片ID,我希望当我点击任何图片时,它会获取我点击的特定图片ID。怎么可能??
页面截图为:http://ugo.offroadstudios.com/gifts.png
这是示例代码:
public class Gifts extends MainScreen {
String giftsid;
BitmapField giftimg;
public Gifts(){
setTitle("Gift Store");
creategifts();
}
public void creategifts()
{
//Link URL
String strURL = "http://ugo.offroadstudios.com/api/frndgift/?loginusername=adil;deviceside=true";
webConnection wb = new webConnection();
String res = wb.getJson(strURL);
try {
JSONObject object = new JSONObject(res);
if(object.getString("status") == "error")
{
Dialog.alert("Invalid "+object.getString("status"));
}
else
{
int totalgifts;
totalgifts = object.getInt("totalgifts");
Bitmap listThumb;
JSONArray imagearr;
JSONArray giftsidarr;
String imgname;
Bitmap bmpResized;
for(int i=0; i < totalgifts; i++){
imagearr = object.getJSONArray("gifts_image");
imgname = imagearr.getString(i);
giftsidarr = object.getJSONArray("gifts_id");
giftsid = giftsidarr.getString(i);
listThumb = getImage.getImageFromUrl("http://ugo.offroadstudios.com/wp-content/plugins/bp-gifts-rebirth/includes/images/"+imgname+";deviceside=true");
bmpResized = GPATools.ResizeTransparentBitmap(listThumb, 80, 80,
Bitmap.FILTER_LANCZOS, Bitmap.SCALE_TO_FIT);
giftimg =new BitmapField(bmpResized,FOCUSABLE)
{
protected boolean navigationClick(int status, int time)
{
Dialog.alert("giftsid "+giftsid);
UiApplication.getUiApplication().pushScreen(new SendGift(giftsid));
return true;
}
};
add(giftimg);
}
}
}
catch (JSONException e) {
System.out.println("EX is "+e);
e.printStackTrace();
}
}
}
最佳答案
您总是会获得列表中最后一件礼物的礼物 ID,因为您已经使用以下代码创建了按钮:
giftimg =new BitmapField(bmpResized,FOCUSABLE)
{
protected boolean navigationClick(int status, int time)
{
Dialog.alert("giftsid "+giftsid);
UiApplication.getUiApplication().pushScreen(new SendGift(giftsid));
return true;
}
};
您的
navigationClick()
使用的方法giftsid
变量,它是您的类的持久成员变量。您在 for
中分配此变量循环,因此它保留的最终值是循环中分配的最后一个值 ( giftsidarr.getString(totalgifts)
)。尽管您声明了
navigationClick()
方法在一个循环中,其中 giftsid
是许多不同的值,navigationClick()
方法使用 giftsid
的值当它是运行 .最后一个值。有很多方法可以修复它。您可以在循环中使用单独的常量值:
final String nextGiftsId = giftsid;
giftimg =new BitmapField(bmpResized,FOCUSABLE)
{
protected boolean navigationClick(int status, int time)
{
Dialog.alert("nextGiftsId= "+nextGiftsId);
UiApplication.getUiApplication().pushScreen(new SendGift(nextGiftsId));
return true;
}
};
或者,按照 Signare 的建议,在每个按钮上附加一个 cookie,以标识其相应的礼物:
giftimg =new BitmapField(bmpResized,FOCUSABLE)
{
protected boolean navigationClick(int status, int time)
{
String giftId = (String)getCookie(); // read gift id from the cookie
Dialog.alert("giftId= "+giftId);
UiApplication.getUiApplication().pushScreen(new SendGift(giftId));
return true;
}
};
giftimg.setCookie(giftsid); // set the cookie after creating the field
关于Blackberry - 具有不同 ID 的可点击位图字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16059581/