2013-12-14 11 views
7

मैंने Google स्थानों api का उपयोग करके स्वत: पूर्ण टेक्स्टव्यू करने के लिए this tutorial का पालन किया। मैं एक स्वत: पूर्ण टेक्स्टव्यू चाहता हूं जो टाइपिंग शुरू करने के बाद स्वचालित रूप से स्थान नामों से खुद को भर देता है। उपरोक्त निर्दिष्ट ट्यूटोरियल बिल्कुल वही है जो मुझे चाहिए लेकिन यह मेरे लिए काम नहीं कर रहा है। ऑटोफिल कार्रवाई नहीं हो रही है। क्या कोई सुझाव दे सकता है?स्वत: पूर्ण टेक्स्टव्यू google Places api

यहाँ मुख्य गतिविधि है

public class MainActivity extends Activity { 

AutoCompleteTextView atvPlaces; 
PlacesTask placesTask; 
ParserTask parserTask; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    atvPlaces = (AutoCompleteTextView) findViewById(R.id.atv_places); 
    atvPlaces.setThreshold(1); 

    atvPlaces.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      placesTask = new PlacesTask(); 
      placesTask.execute(s.toString()); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
     int after) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 
     } 
    }); 
} 

/** A method to download json data from url */ 
private String downloadUrl(String strUrl) throws IOException{ 
    String data = ""; 
    InputStream iStream = null; 
    HttpURLConnection urlConnection = null; 
    try{ 
     URL url = new URL(strUrl); 

     // Creating an http connection to communicate with url 
     urlConnection = (HttpURLConnection) url.openConnection(); 

     // Connecting to url 
     urlConnection.connect(); 

     // Reading data from url 
     iStream = urlConnection.getInputStream(); 

     BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); 

     StringBuilder sb = new StringBuilder(); 

     String line = ""; 
     while((line = br.readLine()) != null){ 
      sb.append(line); 
     } 

     data = sb.toString(); 

     br.close(); 

    }catch(Exception e){ 
     Log.d("Exception while downloading url", e.toString()); 
    }finally{ 
     iStream.close(); 
     urlConnection.disconnect(); 
    } 
    return data; 
} 

// Fetches all places from GooglePlaces AutoComplete Web Service 
private class PlacesTask extends AsyncTask<String, Void, String>{ 

    @Override 
    protected String doInBackground(String... place) { 
     // For storing data from web service 
     String data = ""; 

     // Obtain browser key from https://code.google.com/apis/console 
     String key = "key=AIzaSyBB5KBkuA4-qm8QxaXX8FhHqhHsESMdAzI"; 

     String input=""; 

     try { 
      input = "input=" + URLEncoder.encode(place[0], "utf-8"); 
     } catch (UnsupportedEncodingException e1) { 
      e1.printStackTrace(); 
     } 

     // place type to be searched 
     String types = "types=geocode"; 

     // Sensor enabled 
     String sensor = "sensor=false"; 

     // Building the parameters to the web service 
     String parameters = input+"&"+types+"&"+sensor+"&"+key; 

     // Output format 
     String output = "json"; 

     // Building the url to the web service 
     String url = "https://maps.googleapis.com/maps/api/place/autocomplete/"+output+"?"+parameters; 

     try{ 
      // Fetching the data from we service 
      data = downloadUrl(url); 
     }catch(Exception e){ 
      Log.d("Background Task",e.toString()); 
     } 
     return data; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 

     // Creating ParserTask 
     parserTask = new ParserTask(); 

     // Starting Parsing the JSON string returned by Web Service 
     parserTask.execute(result); 
    } 
} 
/** A class to parse the Google Places in JSON format */ 
private class ParserTask extends AsyncTask<String, Integer, List<HashMap<String,String>>>{ 

    JSONObject jObject; 

    @Override 
    protected List<HashMap<String, String>> doInBackground(String... jsonData) { 

     List<HashMap<String, String>> places = null; 

     PlaceJSONParser placeJsonParser = new PlaceJSONParser(); 

     try{ 
      jObject = new JSONObject(jsonData[0]); 

      // Getting the parsed data as a List construct 
      places = placeJsonParser.parse(jObject); 

     }catch(Exception e){ 
      Log.d("Exception",e.toString()); 
     } 
     return places; 
    } 

    @Override 
    protected void onPostExecute(List<HashMap<String, String>> result) { 

     String[] from = new String[] { "description"}; 
     int[] to = new int[] { android.R.id.text1 }; 

     // Creating a SimpleAdapter for the AutoCompleteTextView 
     SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), result, android.R.layout.simple_list_item_1, from, to); 

     // Setting the adapter 
     atvPlaces.setAdapter(adapter); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
} 

यह PlaceJSONParser.java है

public class PlaceJSONParser { 

/** Receives a JSONObject and returns a list */ 
public List<HashMap<String,String>> parse(JSONObject jObject){ 

    JSONArray jPlaces = null; 
    try { 
     /** Retrieves all the elements in the 'places' array */ 
     jPlaces = jObject.getJSONArray("predictions"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    /** Invoking getPlaces with the array of json object 
    * where each json object represent a place 
    */ 
    return getPlaces(jPlaces); 
} 

private List<HashMap<String, String>> getPlaces(JSONArray jPlaces){ 
    int placesCount = jPlaces.length(); 
    List<HashMap<String, String>> placesList = new ArrayList<HashMap<String,String>>(); 
    HashMap<String, String> place = null; 

    /** Taking each place, parses and adds to list object */ 
    for(int i=0; i<placesCount;i++){ 
     try { 
      /** Call getPlace with place JSON object to parse the place */ 
      place = getPlace((JSONObject)jPlaces.get(i)); 
      placesList.add(place); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    return placesList; 
} 

/** Parsing the Place JSON object */ 
private HashMap<String, String> getPlace(JSONObject jPlace){ 

    HashMap<String, String> place = new HashMap<String, String>(); 

    String id=""; 
    String reference=""; 
    String description=""; 

    try { 

     description = jPlace.getString("description"); 
     id = jPlace.getString("id"); 
     reference = jPlace.getString("reference"); 

     place.put("description", description); 
     place.put("_id",id); 
     place.put("reference",reference); 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return place; 
} 
} 

यह CustomAutoCompleteTextView.java

public class CustomAutoCompleteTextView extends AutoCompleteTextView { 

public CustomAutoCompleteTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

/** Returns the place description corresponding to the selected item */ 
@Override 
protected CharSequence convertSelectionToString(Object selectedItem) { 
    /** Each item in the autocompetetextview suggestion list is a hashmap object */ 
    HashMap<String, String> hm = (HashMap<String, String>) selectedItem; 
    return hm.get("description"); 
} 
} 

है इस मैनिफ़ेस्ट फ़ाइल

है
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.map5" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="18" /> 

<uses-permission android:name="android.permission.INTERNET"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.map5.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

+0

आप तो 'ट्यूटोरियल का पालन कर रहे हैं तो यह चाहिए काम। यदि नहीं, तो यह अनुमान लगाना मुश्किल है कि आप कोड को देखे बिना क्या कर रहे हैं। आवश्यक कोड पोस्ट करें। – JoelFernandes

+0

@ जोएलफ़र्नैंड्स मुझे नहीं पता कि क्या गलत है। लेकिन ऑटोफिल प्रभाव नहीं मिल रहा है। –

उत्तर

7

setThreshold या showDropDown अपने autocompletetextview को सुझाव

atvPlaces.setOnTouchListener(new View.OnTouchListener(){ 
    @Override 
    public boolean onTouch(View v, MotionEvent event){ 
     atvPlaces.showDropDown(); 
     return false; 
    } 
}); 

इस लिंक का उल्लेख दिखाने के लिए here

+0

ने कुंजी बदल दी और इस कोड को जोड़ा। और अब यह काम कर रहा है। बहुत कुछ धन्यवाद :) –

+0

कोई भी दो स्वत: पूर्ण टेक्स्टव्यू के लिए आवश्यक संपादन सुझा सकता है।, 1 स्रोत स्थान के लिए 1 और गंतव्य स्थान के लिए दूसरा। –

+2

ब्रो .... मुझे एंड्रॉइड में नया। मैं उसी ट्यूटोरियल का भी उपयोग कर रहा हूं जिसका आपने उपयोग किया लेकिन मेरा लेकिन ऑटो भरने की कार्रवाई नहीं हो रही है। मुझे इस लिंक का उपयोग करके Google ब्राउज़र एपीआई कुंजी मिली है https://maps.googleapis.com/maps/api/place/autocomplete/"+output+"?"+parameters। बहुत मदद की सराहना की जाएगी और अग्रिम धन्यवाद –

1

डेवलपर कंसोल में Google स्थल एपीआई वेब सेवा सक्षम

संबंधित मुद्दे