gpt4 book ai didi

android - Status{statusCode=NETWORK_ERROR, resolution=null} 即使将 "AutocompleteFilter"作为 null 传递

转载 作者:行者123 更新时间:2023-11-29 02:40:18 25 4
gpt4 key购买 nike

作为 Android 的新手,我正在尝试为一个项目接触 google Map API。我想为谷歌地图实现 AutoComplete。无论我做什么,我都会不断收到 Status{statusCode=NETWORK_ERROR, resolution=null}

我提到了一些 SO 问题,例如:

但是我无法解决这个问题。我将 mPlaceFilter 作为 null 传递,但 status.toString() 仍返回相同的错误

    private ArrayList<PlaceAutocomplete> getAutocomplete(CharSequence constraint) {
if (mGoogleApiClient.isConnected()) {
Log.i("", "Starting autocomplete query for: " + constraint);

// Submit the query to the autocomplete API and retrieve a PendingResult that will
// contain the results when the query completes.
PendingResult<AutocompletePredictionBuffer> results =
Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient, constraint.toString(),mBounds, mPlaceFilter);

// This method should have been called off the main UI thread. Block and wait for at most 60s
// for a result from the API.
AutocompletePredictionBuffer autocompletePredictions = results.await(60, TimeUnit.SECONDS);

// Confirm that the query completed successfully, otherwise return null
final Status status = autocompletePredictions.getStatus();
if (!status.isSuccess()) {
Toast.makeText(mContext, "Error contacting API:: " + status.toString(),Toast.LENGTH_SHORT).show();
Log.e("", "Error getting autocomplete prediction API call: " + status.toString());
autocompletePredictions.release();
return null;
}

Log.i("", "Query completed. Received " + autocompletePredictions.getCount()
+ " predictions.");

// Copy the results into our own data structure, because we can't hold onto the buffer.
// AutocompletePrediction objects encapsulate the API response (place ID and description).

Iterator<AutocompletePrediction> iterator = autocompletePredictions.iterator();
ArrayList resultList = new ArrayList<>(autocompletePredictions.getCount());
while (iterator.hasNext()) {
AutocompletePrediction prediction = iterator.next();
// Get the details of this prediction and copy it into a new PlaceAutocomplete object.
resultList.add(new PlaceAutocomplete(prediction.getPlaceId(), prediction.getFullText(null)));


}

// Release the buffer now that all data has been copied.
autocompletePredictions.release();

return resultList;
}
Log.e("", "Google API client is not connected for autocomplete query.");
return null;
}

logcat中,我可以看到

 06-22 11:11:11.979 1730-24663/? E/AsyncOperation: serviceID=65, operation=GetAutoPredictions

OperationException[Status{statusCode=NETWORK_ERROR, resolution=null}]
at aimj.b(:com.google.android.gms:0)
at aily.a(:com.google.android.gms:39)
at iyv.run(:com.google.android.gms:14)
at jck.run(:com.google.android.gms:24)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at jho.run(:com.google.android.gms:0)
at java.lang.Thread.run(Thread.java:841)

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mapapp2">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:name="android.support.multidex.MultiDexApplication"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="My KEy" />
<!--<meta-data -->
<!--android:name="com.google.android.maps.v2.API_KEY" -->
<!--android:value="My KEy" />-->
</application>

最佳答案

这是我在之前的项目中所做的,它运行良好,可能对您有所帮助。

// Add this code in onCreate()
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, 0 , MainActivity.this)
.addApi(Places.GEO_DATA_API)
.build();
mGoogleApiClient.connect();


// AutoCompleteTextView AddOnTextChangeListener.
to_auto_txt.addTextChangedListener(new TextWatcher() {

public void afterTextChanged(Editable s) {
}

public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}

public void onTextChanged(CharSequence s, int start, int before,
int count) {

if (search_text.length <= 1) {
names = new ArrayList<String>();
parse = new paserdata();
parse.execute();
}
}
});

解析数据是异步任务。

 public class paserdata extends AsyncTask<Void, Integer, Void> {
@Override
protected Void doInBackground(Void... params) {

if (mGoogleApiClient.isConnected()) {
PendingResult<AutocompletePredictionBuffer> results = Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient, search_text[0], BOUNDS_INDIA, null);
AutocompletePredictionBuffer autocompletePredictions = results.await(60, TimeUnit.SECONDS);
final com.google.android.gms.common.api.Status status = autocompletePredictions.getStatus();
if (!status.isSuccess()) {
System.out.println("Error getting autocomplete prediction API call: " + status.toString());
autocompletePredictions.release();
return null;
}
System.out.println("Query completed. Received " + autocompletePredictions.getCount() + " predictions.");
Iterator<AutocompletePrediction> iterator = autocompletePredictions.iterator();
ArrayList resultList = new ArrayList<>(autocompletePredictions.getCount());

while (iterator.hasNext()) {
AutocompletePrediction prediction = iterator.next();
names.add(prediction.getFullText(STYLE_BOLD).toString());
}
// Release the buffer.
autocompletePredictions.release();
}
return null;
}

@Override
protected void onPostExecute(Void result) {
// adp is ArrayAdapter object which declare globally.
adp = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1, names) {
@Override
public View getView(int position, View convertView,
ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView text = (TextView) view
.findViewById(android.R.id.text1);
text.setTextColor(Color.BLACK);
return view;
}
};
// AutoCompleteTextView.
to_auto_txt.setAdapter(adp);
}
}

最后不要忘记断开 mGoogleApiClient 的连接。

@Override
public void onStop() {
mGoogleApiClient.disconnect();
super.onStop();
}

您也可以在 onDestroy() 内部断开连接。

关于android - Status{statusCode=NETWORK_ERROR, resolution=null} 即使将 "AutocompleteFilter"作为 null 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44691142/

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