java - Requesting JSON from Google Maps gives me REQUEST_DENIED -
i wondering why request keeps getting denied. i'm pretty sure api key correct, selected android in google console, gave sha1 project name , grabbed api key , stuck in project. however, still keeps giving me request_denied if try anything. i'm assuming it's how constructing url or if base url broken, or manner requesting data.
i'm new , started playing around few days ago, appreciated.
here code -
mainactivity
package io.github.invainn.quickeat; import android.app.activity; import android.app.listactivity; import android.content.context; import android.content.intent; import android.location.location; import android.location.locationlistener; import android.location.locationmanager; import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.util.log; import android.view.menu; import android.view.menuitem; import android.view.view; import android.widget.adapterview; import android.widget.arrayadapter; import android.widget.button; import android.widget.spinner; import android.widget.textview; import android.widget.toast; import com.google.android.gms.common.connectionresult; import com.google.android.gms.common.api.googleapiclient; import com.google.android.gms.common.api.pendingresult; import com.google.android.gms.common.api.resultcallback; import com.google.android.gms.location.places.placelikelihood; import com.google.android.gms.location.places.placelikelihoodbuffer; import com.google.android.gms.location.places.places; import com.google.android.gms.maps.model.latlng; public class mainactivity extends actionbaractivity implements adapterview.onitemselectedlistener, googleapiclient.onconnectionfailedlistener { spinner spinner; googleapiclient mgoogleapiclient; private charsequence mostlikelyplace; private latlng mostlikelyplacelatlng; private static final string log_tag = "mainactivity"; private static final int google_api_client_id = 0; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mgoogleapiclient = new googleapiclient.builder(mainactivity.this) .addapi(places.place_detection_api) .enableautomanage(this, google_api_client_id, this) .build(); spinner = (spinner) findviewbyid(r.id.spinner); arrayadapter adapter = arrayadapter.createfromresource(this, r.array.choices, android.r.layout.simple_spinner_item); spinner.setadapter(adapter); setupsearchbutton(); pendingresult<placelikelihoodbuffer> result = places.placedetectionapi.getcurrentplace(mgoogleapiclient, null); result.setresultcallback(new resultcallback<placelikelihoodbuffer>() { @override public void onresult(placelikelihoodbuffer likelyplaces) { (placelikelihood placelikelihood : likelyplaces) { log.i(log_tag, string.format("place '%s' " + "likelihood: %g", placelikelihood.getplace().getname(), placelikelihood.getlikelihood())); if(placelikelihood.getlikelihood() >= .20) { mostlikelyplace = placelikelihood.getplace().getname(); mostlikelyplacelatlng = placelikelihood.getplace().getlatlng(); } } toast.maketext(mainactivity.this, "your current location: " + mostlikelyplace, toast.length_long).show(); likelyplaces.release(); } }); } private void setupsearchbutton() { button searchkeyword = (button)findviewbyid(r.id.searchkeyword); searchkeyword.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { toast.maketext(mainactivity.this, "switched listactivity", toast.length_short).show(); bundle args = new bundle(); args.putparcelable("currentlocation", mostlikelyplacelatlng); intent intent = new intent(mainactivity.this, list_activity.class); intent.putextra("bundle", args); startactivity(intent); } }); } @override public void onitemselected(adapterview<?> parent, view view, int position, long id) { } @override public void onnothingselected(adapterview<?> parent) { } @override public void onconnectionfailed(connectionresult connectionresult) { } } list_activity
package io.github.invainn.quickeat; import android.app.activity; import android.content.intent; import android.os.asynctask; import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.text.html; import android.view.menu; import android.view.menuitem; import android.view.view; import android.widget.button; import android.widget.textview; import com.google.android.gms.common.googleplayservicesnotavailableexception; import com.google.android.gms.common.googleplayservicesrepairableexception; import com.google.android.gms.location.places.place; import com.google.android.gms.location.places.ui.placepicker; import com.google.android.gms.maps.model.latlng; import com.google.android.gms.maps.model.latlngbounds; import org.apache.http.httprequestfactory; import java.net.url; public class list_activity extends actionbaractivity { private static final int place_picker_request = 1; private static final string apiaddress = ""; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_list_); // receive bundle , currentlocation bundle bundle = getintent().getparcelableextra("bundle"); latlng currentlocation = bundle.getparcelable("currentlocation"); new queryrequest().execute(currentlocation); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.menu_info, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } } queryrequest
package io.github.invainn.quickeat; import android.os.asynctask; import android.util.log; import com.google.android.gms.location.places.place; import com.google.android.gms.maps.googlemap; import com.google.android.gms.maps.model.latlng; import org.apache.http.httprequest; import org.apache.http.httprequestfactory; 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; /** * created anthony on 4/28/2015. */ public class queryrequest extends asynctask<latlng, integer, string> { private static final string log_tag = "queryrequest"; private static final string apibaseurl = "https://maps.googleapis.com/maps/api/place"; private static final string search = "/textsearch"; private static final string jsonout = "/json"; private static final string apikey = "myapikey"; public static arraylist<place> search(string keyword, double lat, double lng) { arraylist<place> resultlist = null; httpurlconnection conn = null; stringbuilder jsonresults = new stringbuilder(); try { stringbuilder sb = new stringbuilder(apibaseurl); sb.append(search); sb.append(jsonout); // sb.append("?sensor=false"); sb.append("?key=" + apikey); sb.append("&keyword=" + urlencoder.encode(keyword, "utf8")); sb.append("&location=" + string.valueof(lat) + "," + string.valueof(lng)); sb.append("&radius=500"); //system.out.println(sb.tostring()); url url = new url(sb.tostring()); conn = (httpurlconnection) url.openconnection(); inputstreamreader in = new inputstreamreader(conn.getinputstream()); // need test im pretty sure works int read; char[] buff = new char[1024]; while ((read = in.read(buff)) != -1) { jsonresults.append(buff, 0, read); } system.out.println(jsonresults); } catch (malformedurlexception e) { log.e(log_tag, "error processing places api url", e); return null; } catch (ioexception e) { log.e(log_tag, "error connecting places api", e); return null; } { if (conn != null) { conn.disconnect(); } } return null; } @override protected string doinbackground(latlng... params) { latlng loc = params[0]; search("chinese", loc.latitude, loc.longitude ); return null; } } if else wrong code, please do, i'd know.
follow steps below:
google console:
apis & auth -> apis (google places api web service) enable.
apis & auth -> credentials -> create new key -> browser key (you need create browser key , not android key.).
for browser key, not need create specific key using sha1.
Comments
Post a Comment