Thanks for all the help guys! I did it!!!! Here is the code for a live autocompletetextfield, in this case I go off to get predictions from googleapis...
SUBCLASS OF AUTO COMPLETE TEXTFIELD:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package userclasses.silverputtyone.components;
import com.codename1.ui.AutoCompleteTextField;
import com.codename1.ui.events.DataChangedListener;
import com.codename1.ui.list.DefaultListModel;
import com.codename1.ui.list.FilterProxyListModel;
import com.codename1.ui.list.ListModel;
import java.util.Vector;
import userclasses.NetworkParserSpecifics;
import userclasses.Prefs;
import userclasses.dataobjs.InfoHolder;
import static userclasses.dataobjs.RatingsQuestion.thisclass;
import userclasses.silverputtyone.Tools;
/**
*
* @author user
*/
public class AutoCompleteTextFieldForPlaces extends AutoCompleteTextField {
public Tools t;
public static MyListModel myListModel = new MyListModel();
private FilterProxyListModel<String> filter;
//@Override
public AutoCompleteTextFieldForPlaces(String[] completion) {
super(new DefaultListModel<String>(completion));
InfoHolder.googleDirectionsPlacePredictions = new Vector(); //clear
myListModel.addDataChangedListener(new DataChangedListener(){
return dlm;//filter;*/
}
//a simple wrapper around system.out for ease of typing
public static final String thisclass="AutoCompleteTextFieldForPlaces";
public final void _(String s)
{
if (Prefs.DEBUG)
System.out.println("####"+thisclass+":"+s);
//if (LOG_TO_SD_CARD)
//{
// log("####"+thisclass+":"+s);
//}
}
}
LIST MODEL:
package userclasses.silverputtyone.components;
import com.codename1.ui.events.DataChangedListener;
import com.codename1.ui.events.SelectionListener;
import com.codename1.ui.list.DefaultListModel;
import com.codename1.ui.list.ListModel;
import com.codename1.ui.util.EventDispatcher;
import userclasses.Prefs;
import userclasses.dataobjs.InfoHolder;
import static userclasses.silverputtyone.components.AutoCompleteTextFieldForPlaces.thisclass;
/**
*
* @author user
*/
public class MyListModel extends DefaultListModel implements ListModel {
private EventDispatcher dataListener = new EventDispatcher();
private EventDispatcher selectionListener = new EventDispatcher();
@Override
public void addItem(Object item){
_("add item ");
InfoHolder.googleDirectionsPlacePredictions.addElement(item);
fireDataChangedEvent(DataChangedListener.ADDED, InfoHolder.googleDirectionsPlacePredictions.size());
}
private void fireDataChangedEvent(final int status, final int index){
_("fireDataChangedEvent");
dataListener.fireDataChangeEvent(index, status);
}
@Override
public void removeItem(int index){
_("fireDataChangedEvent");
if(index < getSize() && index >= 0){
InfoHolder.googleDirectionsPlacePredictions.removeElementAt(index);
if(index != 0){
setSelectedIndex(index - 1);
}
fireDataChangedEvent(DataChangedListener.REMOVED, index);
}
}
@Override
public void addSelectionListener(SelectionListener l) {
selectionListener.addListener(l);
}
/**
* @inheritDoc
*/
@Override
public void removeSelectionListener(SelectionListener l) {
selectionListener.removeListener(l);
}
@Override
public void addDataChangedListener(DataChangedListener l) {
dataListener.addListener(l);
}
/**
* @inheritDoc
*/
@Override
public void removeDataChangedListener(DataChangedListener l) {
dataListener.removeListener(l);
}
//a simple wrapper around system.out for ease of typing
public static final String thisclass="MyListModel";
public final void _(String s)
{
if (Prefs.DEBUG)
System.out.println("####"+thisclass+":"+s);
//if (LOG_TO_SD_CARD)
//{
// log("####"+thisclass+":"+s);
//}
}
}
NETWORKING FROM t.autocomplete:
////GOOGLE MAPS AUTO COMPLETE/////////////
///GET PLACES FOR AUTO COMPLETE
private static final String LOG_TAG = "ExampleApp";
private static final String TYPE_AUTOCOMPLETE = "/autocomplete";
private static final String TYPE_DETAILS = "/details";
private static final String TYPE_SEARCH = "/search";
private static final String OUT_JSON = "/json";
// KEY!
// private static final String API_KEY = "YOUR KEY";
public ArrayList<String> autocomplete(String input, final int networkState, final boolean expectHTML) {
_("autocomplete received {"+input+"}");
ArrayList<String> resultList = null;
StringBuilder sb = new StringBuilder(PLACES_API_BASE);
sb.append(TYPE_AUTOCOMPLETE);
sb.append(OUT_JSON);
sb.append("?sensor=false");
sb.append("&key=" + Prefs.GOOGLE_MAPS_KEY);
sb.append("&input=" + input);//URLEncoder.encode(input, "utf8"));
String url = sb.toString();
////////////
ConnectionRequest r = new ConnectionRequest()
{
@Override
protected void postResponse()
{
__("postResponse");
}
@Override
protected void readResponse(InputStream input) throws IOException
{
__("readResponse");
nps.parse(networkState,input,expectHTML);
}
};
__(""+url);
r.setUrl(url);
r.setPost(false);
//THIS STOPS SUBMITTING RATINGS WORKING..
// InfiniteProgress prog = new InfiniteProgress();
// Dialog dlg = prog.showInifiniteBlocking();
// r.setDisposeOnCompletion(dlg);
//here we can add any specific arguments to the url
//nps.addSpecificArguments(networkState,r);
//_("Added to queue, now wait for response.");
NetworkManager.getInstance().addToQueueAndWait(r);
///////////////
return resultList;
}
AND FINALLY THE PARSER :-) Enjoy.
case NETWORK_DECODE_GOOGLE_PLACE_AUTO_COMPLETE:
_("NETWORK_DECODE_GOOGLE_PLACE_AUTO_COMPLETE");
//decode a list of predictiosn from google like:
responsex = (String)h.get("status");
_("responsex:"+responsex);
if(responsex.equals("REQUEST_DENIED")){
System.out.println("make sure to obtain a key from "
//progress.dispose();
Dialog.show("Info", "make sure to obtain an application key from "
+ "google places api's"
, "Ok", null);
return;
}
response = new String[h.size()];
counter=0;
InfoHolder.googleDirectionsPlacePredictions = new Vector();
Vector vecc = (Vector) h.get("predictions");
if (vecc!=null)
{
_("vecc size is "+vecc.size());
}
for (int i = 0; i < vecc.size(); i++) {
Hashtable entry = (Hashtable) vecc.elementAt(i);
//Hashtable geo = (Hashtable) entry.get("geometry");
// Hashtable loc = (Hashtable) geo.get("location");
//Double lat = (Double) loc.get("lat");
//Double lng = (Double) loc.get("lng");
//_("lat:"+lat);
//_("lng:"+lng);
//PointLayer point = new PointLayer(new Coord(lat.doubleValue(), lng.doubleValue()),
// (String) entry.get("name"), null);
// pl.addPoint(point);
//GAZ ADD LINES TOO
// LinesLayer line = new LinesLayer(new Coord(lat.doubleValue(), lng.doubleValue()));
//
String prediction = (String) entry.get("description");
_("prediction:"+prediction);
// InfoHolder.googleDirectionsPlacePredictions.add(prediction);
AutoCompleteTextFieldForPlaces.myListModel.addItem(prediction);
}
/*
v = (Vector)e.nextElement();
_("Got Vector of size "+v.size());
ee = v.elements(); // get its array
while (ee.hasMoreElements())
{
Hashtable ht = (Hashtable) ee.nextElement();
String store_code = (String) ht.get("store_code");
// InfoHolder.googleDirectionsRoute.add(station);
}
*/
break;