2015-12-09 2 views
-2

Я выполнил все решения, которые я могу выполнить. Я включил API, связанные с моим проектом, и сделал ключи API (браузер, андроид) медленно, и, конечно, но никто не работает. Согласно this, мой ключ API неверен или отсутствует. Есть ли способ проверить, изменяется ли значение в моем манифесте или получает значение null при запуске моего проекта?INVALID API KEY android Google Адреса

+0

являются копировать и вставлять ключи API или набирать их на основе визуального? Я только спрашиваю, потому что, по моему опыту, я обнаружил, что копирование и вставка ключей api из панели инструментов dev работает каждый раз. –

+0

Я пробовал копировать и печатать, но он все равно не работает. Спасибо за совет, я попробую еще раз. – ErlAl

ответ

0

Я решил проблему, используя код, который я нашел из учебников. надейтесь на эту помощь для людей, имеющих такую ​​же проблему.

Я сделал PlaceAPI класс

public class PlaceAPI{ 

    private static final String TAG = PlaceAPI.class.getSimpleName(); 

    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 = "key here"; 

    public ArrayList<String> autocomplete (String input) { 
     ArrayList<String> resultList = null; 
     ArrayList<String> resultListid = null; 

     HttpURLConnection conn = null; 
     StringBuilder jsonResults = new StringBuilder(); 

     try { 
      StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON); 
      sb.append("?key=" + API_KEY.trim()); 
      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(TAG, "Error processing Places API URL", e); 
      return resultList; 
     } catch (IOException e) { 
      Log.e(TAG, "Error connecting to Places API", e); 
      return resultList; 
     } finally { 
      if (conn != null) { 
       conn.disconnect(); 
      } 
     } 

     try { 
      // Log.d(TAG, jsonResults.toString()); 

      // Create a JSON object hierarchy from the results 
      JSONObject jsonObj = new JSONObject(jsonResults.toString()); 
      JSONArray predsJsonArray = jsonObj.getJSONArray("predictions");//result 

      // 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"));//geometry 
      } 
     } catch (JSONException e) { 
      Log.e(TAG, "Cannot process JSON results", e); 
     } 

     //GET PLACEID 
     try { 

      // Create a JSON object hierarchy from the results 
      JSONObject jsonObjid = new JSONObject(jsonResults.toString()); 
      JSONArray predsJsonArrayid = jsonObjid.getJSONArray("predictions"); 

      // Extract the Place descriptions from the results 
      resultListid = new ArrayList<String>(predsJsonArrayid.length()); 
      for (int i = 0; i < predsJsonArrayid.length(); i++) { 
       resultListid.add(predsJsonArrayid.getJSONObject(i).getString("id")); 
      } 
     } catch (JSONException e) { 
      Log.e(TAG, "Cannot process JSON results", e); 
     } 

     return resultList; 
    } 
} 

и сделал адаптер PlacesAutoCompleteAdapter

class PlacesAutoCompleteAdapter extends ArrayAdapter<String> implements Filterable { 

    ArrayList<String> resultList; 

    Context mContext; 
    int mResource; 

    PlaceAPI mPlaceAPI = new PlaceAPI(); 

    public PlacesAutoCompleteAdapter(Context context, int resource) { 
     super(context, resource); 

     mContext = context; 
     mResource = resource; 
    } 

    @Override 
    public int getCount() { 
     // Last item will be the footer 
     return resultList.size(); 
    } 

    @Override 
    public String getItem(int position) { 
     return resultList.get(position); 
    } 

    @Override 
    public Filter getFilter() { 
     Filter filter = new Filter() { 
      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       FilterResults filterResults = new FilterResults(); 
       if (constraint != null) { 
        resultList = mPlaceAPI.autocomplete(constraint.toString()); 

        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; 
    } 
} 

затем с помощью адаптера автозаполнения:

autocomplete = (AutoCompleteTextView) findViewById(R.id.autocomplete); 
     autocomplete.setAdapter(new PlacesAutoCompleteAdapter(this, R.layout.autocomplete_list_item)); 
     autocomplete.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       // Get data associated with the specified position 
       // in the list (AdapterView) 
       place = (String) parent.getItemAtPosition(position); 
       //Toast.makeText(this, description, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
1

Если вы сделали с программой установки Google, то просто попробуйте этот адрес, он всегда работает для меня ...

private String getPlacesApiUrl() { 
    String url = ""; 
    String location = String.valueOf(currentLocation.latitude)+","+String.valueOf(currentLocation.longitude);  
    String radius = "5000"; 
    String type = "hospital";  
    String sensor = "false"; 
    String key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 

    try { 
     url = "https://maps.googleapis.com/maps/api/place/search/json" 
      + "?location=" + URLEncoder.encode(location, "UTF-8") 
      + "&type=" + URLEncoder.encode(type, "UTF-8") 
      + "&radius=" + URLEncoder.encode(radius, "UTF-8") 
      + "&sensor=" + URLEncoder.encode(sensor, "UTF-8") 
      + "&key=" + URLEncoder.encode(key, "UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 
    Log.d("url",url); 
    return url; 
} 

Но убедитесь, что вы используете Browser Key

Успехов ,

+1

привет спасибо за решение, теперь он отлично работает. Вы знаете, как получить длинный лот и лат? Еще раз спасибо, сэр, вы спасатель жизни. – ErlAl

+0

Добро пожаловать. Пожалуйста, рассмотрите параметр «type: parameter» в этом методе. Здесь вы можете передать любой тип, указанный здесь https://developers.google.com/places/supported_types. И также ознакомьтесь с этим руководством https://developers.google.com/ места/веб-сервис/поиск? гектолитры = еп. – Khan