Google Places autocomplete-Android - funktioniert Nicht
Ich bin neu in Android-App-Entwicklung.
Ich folgte in diesem toturial zu schreiben eine einfache Google Places autocomplete Android-App, aber nicht wieder Anregungen, wenn ich mit der Eingabe beginnen in der app; es gibt NativeCrypto Fehler im LogCat, wenn ich alles schreiben, was in der AutoVervollständigen-textview. Hier ist mein code:
package com.example.newxyz;
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.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.Toast;
public class GooglePlacesAutocompleteActivity extends Activity implements OnItemClickListener {
private static final String LOG_TAG = "Google Places Autocomplete";
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 = "AIzaSyAujQlZ1Jj64NAHMoynXjI253MVRzGW09w";
private static final String True = "true";
private static final String language = "en";
AutoCompleteTextView autoCompView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
autoCompView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
autoCompView.setAdapter(new GooglePlacesAutocompleteAdapter(this, R.layout.list_item));
autoCompView.setOnItemClickListener(this);
}
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
String str = (String) adapterView.getItemAtPosition(position);
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
public static 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=" + True);
sb.append("&key=" + API_KEY);
sb.append("&language" + language);
//sb.append("&components=country:gr");
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++) {
System.out.println(predsJsonArray.getJSONObject(i).getString("description"));
System.out.println("============================================================");
resultList.add(predsJsonArray.getJSONObject(i).getString("description"));
}
} catch (JSONException e) {
Log.e(LOG_TAG, "Cannot process JSON results", e);
}
return resultList;
}
class GooglePlacesAutocompleteAdapter extends ArrayAdapter<String> implements Filterable {
private ArrayList<String> resultList;
public GooglePlacesAutocompleteAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
@Override
public int getCount() {
return resultList.size();
}
@Override
public String getItem(int index) {
return resultList.get(index);
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
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;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
};
return filter;
}
}
}
Hier ist mein LogCat Fehler:
05-04 13:16:27.705: E/NativeCrypto(9312): ssl=0x611c0a20 cert_verify_callback x509_store_ctx=0x62625940 arg=0x0
05-04 13:16:27.705: E/NativeCrypto(9312): ssl=0x611c0a20 cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_RSA
- Ich aktiviert haben, Google Places API für Android console.developers.google.com
- Ich bin mit einem Browser Schlüssel für meine app
- Habe ich mich für die Antworten zu meinem problem und habe nicht gefunden eine relevante Antwort noch
- Ich habe Ihnen die Internet-Berechtigungen in der Menifest Datei
- In der Übersicht der Entwickler-Konsole, die Grafik zeigt die Anfragen, was bedeutet, dass Anfragen gemacht werden, aber es gibt keine Antwort.
Jede Hilfe wäre sehr geschätzt werden.
Dank
- "es gibt NativeCrypto Fehler in LogCat"? Post dat logcat dann bitte (der logger tatsächlich bei der Fehlersuche)...
- Bitte überprüfen Sie die post bearbeitet
- Es könnte sein, lohnt sich ein Blick auf die neuen Orte, die API für Android (developers.google.com/places/android) die Unterstützung für Autocomplete.
- Ich nochmals zu überprüfen und verfolgen jeden Schritt, wie in dem link, den Sie...der Fehler besteht weiterhin
- Sie erwähnt, dass Sie ein Browser-Taste. Hast du auf einem Android-Schlüssel?
- ja, habe ich...
- Aisa karain versuchen, aktivieren Sie Google Place API-Webservice. Was ich sehe, der code, bist du mit dem Web-API und nicht die Android-API. Und, da Sie mit der web-API verwenden, sollten Sie das browser-Taste, nicht ein Android-Schlüssel. Lassen Sie mich wissen, wenn es funktioniert.
- Ich konnte die Android-API, die gleichen Fehler, und keine Vorschläge, wie ich von einem autocomplete textview
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gehen Google-Konsole >> Api >> Aktivieren der Google Places API Web-Service.
Sehen Lösung
Da Sie die Places-API-web-service (im Gegensatz zu den Android-service), Sie müssen aktivieren die
Google Places API Web Service
API in der Google Developers Console.Sobald Sie haben, dass Sie arbeiten, wenn Sie möchten, um Ihren code zu vereinfachen, und verwenden Sie eine Bibliothek, die eine GooglePlaceAutoComplete widget, check-out Ritzel (ich bin der Entwickler). Nach dem einrichten mit Ihrem API-Schlüssel, fügen Sie ein working Places autocomplete-API, um Ihr layout mit so etwas wie:
Kämpfte ich dieses Problem gestern, so dass es entweder
API_KEY
(z.B. könnten Sie setup verschiedene Präfix für debug-version bauen.gradle verwendet oder falsch SH1 oder registrieren Sie sich, um einige andere eher als 'Google Places API für die Android')enableAutoManage(fragmentActivity, clientId, connectionCallback)
sonstGoogleApiClient.blockingConnect()
oderGoogleApiClient.connect()
genanntEhrlich gesagt, ich bin nicht glücklich, wie #Google dies getan API. So merkwürdig, wie zu verstehen, was passiert ist wenn Sie mit code 9001, 9006, 9007, was?
In meinem Fall war das problem
Und die Lösung wurde aktivieren Google Places API Web-Service in der Google Api Console.
Ich gern eine Lösung, es ist nichts falsch mit text watcher.
In dem code unten habe ich nicht überschreiben "performFiltering" - Methode. Ich habe es und mein auto complete text jetzt gut funktioniert.
Aktivieren "Google Places API, Web Service API und geben Sie es ein versuchen. Es funktionierte für mich.
Bitte versuchen Sie etwas wie das hier tun:
Ist es die Arbeit in meinem Fall.
Die Lösung ist das hinzufügen googlePlaceApi Projekt in console.developers.google.com