2017-06-22 108 views
1

作爲Android的新手,我試圖讓我的手放在Google Map API上。我可以嘗試執行谷歌地圖AutoComplete。無論我做什麼,我總是得到Status{statusCode=NETWORK_ERROR, resolution=null}狀態{statusCode = NETWORK_ERROR,resolution = null}即使在傳遞「AutocompleteFilter」爲空時

我refered像一些做題:

,但我無法來解決問題。我傳遞mPlaceFilternull,仍然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> 

+0

可能是你正在使用錯誤的密鑰。嘗試生成新的密鑰,然後嘗試一下。 –

+0

不要忘記manifestfile中的這個標籤

+0

@Andy:是的,元數據已經存在到位。重新生成的關鍵,以及但仍然有相同的錯誤 –

回答

0

這是我在我以前的項目中所做的,它工作正常可能會幫助你。

// 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(); 
       } 
      } 
    }); 

解析數據是Asynctask。

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()了。

+0

謝謝,但它沒有工作。我會在幾天內更新你的 –

相關問題