【问题标题】:Status{statusCode=NETWORK_ERROR, resolution=null} even when passing "AutocompleteFilter" as nullStatus{statusCode=NETWORK_ERROR, resolution=null} 即使将“AutocompleteFilter”传递为 null
【发布时间】:2017-11-25 05:53:52
【问题描述】:

作为 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>

【问题讨论】:

  • 可能是您使用了错误的密钥。请尝试生成新密钥然后尝试。
  • 不要忘记清单文件中的这个标签
  • @Andy :是的,元数据已经到位。也重新生成了密钥,但仍然出现相同的错误
  • 你在使用谷歌地图并为谷歌添加这一行 映射然后删除它。
  • @AndyDeveloper:我没有明白你添加然后删除它的意思。我添加,启动然后再次评论它,但它没有用。这是你让我做的吗?

标签: android google-maps


【解决方案1】:

这是我在以前的项目中所做的,它工作正常可能对你有帮助。

// 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() 内部断开连接。

【讨论】:

  • 谢谢,但没用。过几天我会更新你的
猜你喜欢
  • 1970-01-01
  • 2017-01-03
  • 2017-03-19
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 2016-04-25
  • 2019-02-14
  • 1970-01-01
相关资源
最近更新 更多