Amrita Stha
Amrita Stha

Reputation: 3357

to display the data obtained from button listener to list- codename one

I have a button that display the data obtained from json. below is my code for button action. I need help to display the data obtained to list.

@Override
   protected void onMain_ButtonAction(final Component c, ActionEvent event) {

        ConnectionRequest r = new ConnectionRequest() {
           Hashtable h;

             @Override
            protected void postResponse() {

            }

            @Override
            protected void readResponse(InputStream input) throws IOException {

                InputStreamReader reader = new InputStreamReader(input);

               JSONParser p = new JSONParser();
               h = p.parse(new InputStreamReader(input));

                Hashtable response = p.parse(reader);

                 Hashtable feed = (Hashtable)response.get("root");

                for (Object s : h.values()) {
                        Vector vec = new Vector(100);
                         vec = (Vector)s;

                   int i;
                  for(i = 0; i<vec.size(); i++){

                     Hashtable<String, String> ht= (Hashtable<String, String>) vec.get(i);
                      System.out.println(ht.get("location"));
                   // findLabel().setText(ht.get("location"));

                }


                }
            }




        };
       r.setUrl("http://ruslanapp.demo.capitaleyenepal.com/vodka-mobile-interface/getData/locations");
       r.setPost(false);
       InfiniteProgress prog = new InfiniteProgress();
       Dialog dlg = prog.showInifiniteBlocking();
       r.setDisposeOnCompletion(dlg);
       NetworkManager.getInstance().addToQueue(r);

   }

I want to list the data obtained frm btn above to the list below. how can I do it??

 @Override
   protected boolean initListModelList1(List cmp) {
       cmp.setModel(new com.codename1.ui.list.DefaultListModel(new String[] {"Item 1", "Item 2", "Item 3"}));


       return true;

   }

Upvotes: 0

Views: 167

Answers (1)

Shai Almog
Shai Almog

Reputation: 52760

You did most of the work well, I suggest avoiding a list and using an infinite container. The PropertyCross demo has pretty much this functionality (including JSON): https://www.udemy.com/learn-mobile-programming-by-example-with-codename-one/

To finish the code above create the model ArrayList above e.g. assuming you are using a MultiList:

// define this in the class variables:
private ArrayList<Map<String, String>> modelData = new ArrayList<Map<String, String>>();

// then in the code (I assumed stuff about your JSON, correct the 
// code to extract the data correctly, just set the hashmap values
for (Object s : h.values()) {
   Collection<Map<String, String>>) data = (Collection<Map<String, String>>))s;
   for(Map<String, String> ht : data) {
      String location = ht.get("location");
      HashMap<String, String> entry = new HashMap<String, String>();
      entry.put("Line1", location);
      modelData.add(entry);
   }
 }

Then in:

@Override
protected boolean initListModelList1(List cmp) {
   cmp.setModel(new DefaultListModel(modelData));
   return true;
}

Notice that you should use showForm() to show the next form in the postResponse method.

Upvotes: 1

Related Questions