gpt4 book ai didi

java - 从 Google map 请求 JSON 给我 REQUEST_DENIED

转载 作者:行者123 更新时间:2023-12-01 18:15:25 24 4
gpt4 key购买 nike

我想知道为什么我的请求总是被拒绝。我很确定我的 API key 是正确的,我在 Google Console 中选择了 android,用我的项目名称为其提供了 sha1,并获取了 API key 并将其粘贴在我的项目中。但是,如果我尝试任何操作,它仍然会不断给我 REQUEST_DENIED 。我假设这与我构建 URL 的方式或基本 URL 是否损坏有关,或者可能与我请求数据的方式有关。

我对此很陌生,几天前才开始玩,所以任何帮助将不胜感激。

这是我的代码 -

主要 Activity

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) {
for (PlaceLikelihood placeLikelihood : likelyPlaces) {
Log.i(LOG_TAG, String.format("Place '%s' with " +
"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 to 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 and get currentlocation
Bundle bundle = getIntent().getParcelableExtra("bundle");
LatLng currentLocation = bundle.getParcelable("currentLocation");

new QueryRequest().execute(currentLocation);

}

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

查询请求

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 by 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 to test but im pretty sure this 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 to Places API", e);
return null;
} finally {
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;
}
}

如果我的代码还有其他问题,请告诉我,我想知道。

最佳答案

请按照以下步骤操作:

Google 控制台:

API 和身份验证 -> API(Google Places API Web 服务)已启用。

API 和身份验证 -> 凭据 -> 创建新 key -> 浏览器 key (您需要创建浏览器 key 而不是 Android key 。)。

对于浏览器 key ,您不需要使用 Sha1 创建特定 key 。

关于java - 从 Google map 请求 JSON 给我 REQUEST_DENIED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29931513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com