I am very new to android Google maps i write the following program for displaying the auto sugesstion in the android when i am type the text in the Autocomplete text box it is going the input to the url but the out put is not showing in the program .please see once and let me know where i am doing the mistake.
ExampleApp.java
package com.example.exampleapp;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater.Filter;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Filterable;
import android.widget.Toast;
public class ExampleApp extends Activity implements OnItemClickListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AutoCompleteTextView autoCompView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
autoCompView.setAdapter(new PlacesAutoCompleteAdapter(this, R.layout.list_item));
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
String str = (String) arg0.getItemAtPosition(arg2);
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
}
class PlacesAutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
private ArrayList<String> resultList;
public PlacesAutoCompleteAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
private static final String PLACES_API_BASE = "https://maps.googleapis.com/maps/api/place";
private static final String TYPE_AUTOCOMPLETE = "/autocomplete";
private static final String OUT_JSON = "/json";
private static final String API_KEY = "";
@Override
public int getCount() {
return resultList.size();
}
@Override
public String getItem(int index) {
return resultList.get(index);
}
@Override
public android.widget.Filter getFilter() {
Filter filter = new Filter() {
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
// Retrieve the autocomplete results.
resultList = autocomplete(constraint.toString());
// Assign the data to the FilterResults
// filterResults.values = resultList;
// filterResults.count = resultList.size();
}
return filterResults;
}
private ArrayList<String> autocomplete(String input) {
ArrayList<String> resultList = null;
HttpURLConnection conn = null;
StringBuilder jsonResults = new StringBuilder();
try {
StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
sb.append("?sensor=false&key=" + API_KEY);
sb.append("&components=country:uk");
sb.append("&input=" + URLEncoder.encode(input, "utf8"));
URL url = new URL(sb.toString());
conn = (HttpURLConnection) url.openConnection();
InputStreamReader in = new InputStreamReader(conn.getInputStream());
// Load the results into a StringBuilder
int read;
char[] buff = new char[1024];
while ((read = in.read(buff)) != -1) {
jsonResults.append(buff, 0, read);
}
} catch (MalformedURLException e) {
// Log.e(LOG_TAG, "Error processing Places API URL", e);
return resultList;
} catch (IOException e) {
//Log.e(LOG_TAG, "Error connecting to Places API", e);
return resultList;
} finally {
if (conn != null) {
conn.disconnect();
}
}
try {
// Create a JSON object hierarchy from the results
JSONObject jsonObj = new JSONObject(jsonResults.toString());
JSONArray predsJsonArray = jsonObj.getJSONArray("predictions");
// Extract the Place descriptions from the results
resultList = new ArrayList<String>(predsJsonArray.length());
for (int i = 0; i < predsJsonArray.length(); i++) {
resultList.add(predsJsonArray.getJSONObject(i).getString("description"));
}
} catch (JSONException e) {
// Log.e(LOG_TAG, "Cannot process JSON results", e);
}
return resultList;
}
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}
@Override
public boolean onLoadClass(Class arg0) {
// TODO Auto-generated method stub
return false;
}};
return (android.widget.Filter) filter;
}
}
FilterResults.java
package com.example.exampleapp;
import java.util.ArrayList;
public class FilterResults {
protected ArrayList<String> values;
protected int count;
}
i write the above code but the application closed .please see once and let me know where i am doing mistake in the above code ?
Thanks in Advance..........
Here is the Code Snippet Which i have Used when i have similar problem. i give you one suggestion that D’nt put your whole code in only single java file. Make the separate methods/class for each different task you are using in your code. it will help you easier to trace it.
here is my PlacesAutoCompleteAdapter.java File.
here is What you have to do inside OnCreate() of your activity.
here are the static Strings i have used in app.
and Finally here is the Method that you will use in Adapter.
EDITED :
i guess you have specified the list_item.xml as below.
try it out. Hope it will helps you.
UPDATE :
or you can try out below thing also.
EDITED:
HOW TO GET TEXT OF AutoCompleteTextViewjust write this code snippet.