Blackberry - 具有不同 ID 的可点击位图字段

标签 blackberry

我正在创建一个应用程序,在该应用程序中,我通过 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/

相关文章:

user-interface - 黑莓 TableView

css - Font Awesome 图标在某些浏览器中不起作用

黑莓Java加载器

java - 将 BlackBerry 应用程序与 Flurry 集成

blackberry - 从设备卸载应用程序(使用备用入口点进行同步)

excel - 从第三方黑莓应用程序启动 Documents To Go 应用程序

http - 打开 HTTP 连接

java - 如何设置 BrowserField 以填充可用的屏幕空间?

BlackBerry 屏幕截图实用程序 - 从台式计算机

iphone - 保护移动设备和 Web 服务之间连接的协议(protocol)?