Search code examples
javalistcodenameoneparse-serverparse4cn1

Codename One Parse Server to retrieve List


Hi I'm using Codename One and Parse Server to save database in my Mobile App, but I wanna put each result of the query inside a button, because I need to click on each element of the List. ParseQuery.getQuery("List") "List" is the ID referenced in the database and "Title" return String.

//Method:

public Container retrieveList(String content) {

    Container list = new Container(BoxLayout.y());

    ParseObject po = null;

    try {

        po = ParseObject.fetch(content /*class name*/, "nsC2NdmCuQ" /*objectId*/);

    } catch (ParseException e) {

        Dialog.show("Err", "Oops! Database is not available at the moment" + e.getCode(), "OK", null);
    }

    Label title = new Label("Book's Title: " + po.getString("Title"));
    list.addComponent(title);
    return list;
}

//MENU: 

public void listMenu() {

final Form listMenu = new Form("Welcome to the List Menu"); listMenu.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); ParseQuery<ParseObject> query = ParseQuery.getQuery("List"); query.whereExists("Title"); List<ParseObject> results = null; Container dumpList = null; listMenu.add(dumpList).removeAll(); ParseServerDAO ps = new ParseServerDAO(); try { results = query.find(); int index = 0; for(;index < results.size();) { dumpList = ps.retrieveList(//How to get each element from results?); //Add each element of results to a button. } } catch (com.parse4cn1.ParseException e) { Dialog.show("Oops! Try later, server is not working right now.", "", "OK", null); } listMenu.add(dumpList); }

Solution

  • If you want a list of buttons you should probably do something like this:

    public MultiButton retrieveListItem(String content, ActionListener l) {
        ParseObject po = null;
        try {
    
            po = ParseObject.fetch(content /*class name*/, "nsC2NdmCuQ" /*objectId*/);
    
        } catch (ParseException e) {
    
            Dialog.show("Err", "Oops! Database is not available at the moment" + e.getCode(), "OK", null);
        }
    
        MultiButton title = new MultiButton("Book's Title: " + po.getString("Title"));
        title.addActionListener(l);
        title.putClientProperty("ParseObject", po);
        return title;
    }
    

    Notice you can use Button, MultiButton, SpanButton etc. for various use cases.

    Notice that in the action listener you would want to invoke getActualComponent() on the event object and not getComponent().

    E.g. event handling code:

     public void actionPerformed(ActionEvent ev) {
         MultiButton mb = ev.getActualComponent();
         ParseObject po = (ParseObject)mb.getClientProperty("ParseObject");
     }