0

GoogleプレイスオートコンプリートAPIを実装しようとしていますが、何かを検索するたびに検索バーが携帯電話でクラッシュしました。一部の電話機でGoogleプレイスオートコンプリートAPIがクラッシュしました

一部の携帯電話(Moto G 2世代XT1068など)では動作しますが、検索バーで何かを検索してからEnterキーを押すと、Lenovo A7000でクラッシュします。

私が直面している別の問題は、私は南アフリカの近くに表示されるデフォルトのGoogleマップの場所を変更したいと思います。特定の場所に変更します。どうやってやるの?あなたの問題に対処するために

package com.docto365.activity; 

import android.content.Context; 
import android.content.DialogInterface; 
import android.graphics.Color; 
import android.location.Address; 
import android.location.Geocoder; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.provider.Settings; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 

import com.google.android.gms.common.api.Status; 
import com.google.android.gms.location.places.Place; 
import com.google.android.gms.location.places.ui.PlaceAutocompleteFragment; 
import com.google.android.gms.location.places.ui.PlaceSelectionListener; 
import com.google.android.gms.maps.CameraUpdate; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.LatLngBounds; 
import com.google.android.gms.maps.model.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 

import android.content.Intent; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

import java.io.IOException; 
import java.util.List; 


import com.docto365.R; 

public class HospitalMapsActivity extends FragmentActivity /*implements OnMapReadyCallback*/ implements LocationListener{ 

    private GoogleMap mMap; 
    LocationManager location; 
    Toolbar mActionBarToolbar; 
    private static final LatLngBounds Bhubaneswar = new LatLngBounds(
      new LatLng(20.192597, 85.792239), new LatLng(20.409371, 85.824544)); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_hospital_maps); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     /*SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this);*/ 
     PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment) 
       getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); 
     autocompleteFragment.setHint("Search Hospitals & Clinics"); 
     autocompleteFragment.setBoundsBias(Bhubaneswar); 
     mActionBarToolbar=(Toolbar)findViewById(R.id.toolbar); 
     mActionBarToolbar.setTitle("  Hospitals & Clinics"); 
     mActionBarToolbar.setNavigationIcon(R.drawable.ic_arrow_back); 
     mActionBarToolbar.setTitleTextColor(Color.WHITE); 
     mActionBarToolbar.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       finish(); 
      } 
     }); 
     location= (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     location.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 400, 1000, this); 



     autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
      @Override 
      public void onPlaceSelected(Place place) { 
       // TODO: Get info about the selected place. 
       //Log.i(TAG, "Place: " + place.getName()); 
       //Toast.makeText(HospitalMapsActivity.this, "Place: " + place.getName(), Toast.LENGTH_LONG).show(); 
       //EditText et = (EditText) findViewById(R.id.autotext); 
       //String destination = et.getText().toString(); 
       String destination = (String) place.getName(); 

       List<Address> addressList = null; 
       if (destination == null || !destination.equals("")) { 
        Geocoder geocoder = new Geocoder(HospitalMapsActivity.this); 
        try { 
         addressList = geocoder.getFromLocationName(destination, 1); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        Address address = addressList.get(0); 
        LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude()); 
        mMap.addMarker(new MarkerOptions().position(latLng).title(destination)); 
        mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 
       } 
      } 

      @Override 
      public void onError(Status status) { 
       // TODO: Handle the error. 
       //Log.i(TAG, "An error occurred: " + status); 
       Toast.makeText(HospitalMapsActivity.this, "An error occured: " + status, Toast.LENGTH_LONG).show(); 
      } 
     }); 
     //setUpMapIfNeeded(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     setUpMapIfNeeded(); 
    } 



    private void setUpMapIfNeeded() 
    { 
     if(mMap==null) 
      mMap=((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
     if(mMap!=null) 
      setUpMap(); 
    } 
    private void setUpMap() 
    { 
     //mMap.addMarker(new MarkerOptions().position(new LatLng(20.271790,85.843858)).title("Marker").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))); 
     mMap.setMyLocationEnabled(true); 
     //mMap.animateCamera(CameraUpdateFactory.zoomTo(17.0f)); 
     mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
      @Override 
      public boolean onMarkerClick(Marker marker) { 
       Toast.makeText(HospitalMapsActivity.this,"Tap on healthcare centre name to book a cab",Toast.LENGTH_LONG).show(); 
       return false; 
      } 
     }); 
     mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() { 
      @Override 
      public void onInfoWindowClick(Marker marker) { 
       AlertDialog.Builder dialog = new AlertDialog.Builder(HospitalMapsActivity.this); 
       dialog.setTitle("Book Cab"); 
       dialog.setMessage("Do you want to book a cab?"/*HospitalMapsActivity.this.getResources().getString(R.string.gps_network_not_enabled)*/); 
       dialog.setPositiveButton("Book now"/*HospitalMapsActivity.this.getResources().getString(R.string.open_location_settings)*/, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
         // TODO Auto-generated method stub 
         Intent i = new Intent(HospitalMapsActivity.this, Book.class); 
         startActivity(i); 
         //get gps 
        } 
       }); 
       dialog.setNegativeButton("Later"/*HospitalMapsActivity.this.getResources().getString(R.string.open_location_settings)*/, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
         // TODO Auto-generated method stub 

         //get gps 
        } 
       }); 
       dialog.show(); 
      } 
     }); 


     LocationManager lm = (LocationManager)HospitalMapsActivity.this.getSystemService(Context.LOCATION_SERVICE); 
     boolean gps_enabled = false; 
     boolean network_enabled = false; 

     try { 
      gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     } catch(Exception ex) { 
      Toast.makeText(HospitalMapsActivity.this,"Something is wrong",Toast.LENGTH_LONG).show(); 
     } 

     try { 
      network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
     } catch(Exception ex) { 
      Toast.makeText(HospitalMapsActivity.this,"Something is wrong",Toast.LENGTH_LONG).show(); 
     } 

     if(gps_enabled==false /*&& network_enabled==false*/) { 
      // notify user 
      AlertDialog.Builder dialog = new AlertDialog.Builder(HospitalMapsActivity.this); 
      dialog.setTitle("Location Services Disabled"); 
      dialog.setMessage("Please enable location services."/*HospitalMapsActivity.this.getResources().getString(R.string.gps_network_not_enabled)*/); 
      dialog.setPositiveButton("Enable"/*HospitalMapsActivity.this.getResources().getString(R.string.open_location_settings)*/, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
        // TODO Auto-generated method stub 
        Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
        HospitalMapsActivity.this.startActivity(myIntent); 
        //get gps 
       } 
      }); 

      dialog.show(); 
     } 



     mMap.addMarker(new MarkerOptions().position(new LatLng(20.260423, 85.777747)).title("AMRI HOSPITALS").icon(BitmapDescriptorFactory.fromResource(R.drawable.sp))); 

    } 

    @Override 
    public void onLocationChanged(Location arg0) { 
     LatLng latLng = new LatLng(arg0.getLatitude(), arg0.getLongitude()); 
     CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 15.0f); 
     mMap.animateCamera(cameraUpdate); 
     location.removeUpdates(this); 






        setUpMapIfNeeded(); 
     //mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(20.269556,85.841157) , 14.0f)); 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 
} 
+0

ようこそスタックオーバーフロー。一度に1つの質問を投稿してください。ここであなたのエラーに関するほとんどの情報を収集してください。(これらの携帯電話のOSバージョンはどうですか?) – technico

+1

Lenovo a7000にはv4.4.4があり、この電話機の検索バーはアプリを停止させます。 Moto G2ndの世代はv6.0.1ですが、ここではすべて正常に動作します。 –

+0

クラッシュのスタックトレースを追加できますか?それは人々が間違っていることを解決するのに役立ちます。 onPlaceSelected()を見ると、addressListは(geocoder.getFromLocationName()が例外をスローすると)設定される前にアクセスできることがわかります。多分、これは起こっていることです。 – AndrewR

答えて

0

私は検索バーに何かを検索し、enterキーを押したときにそれは一部の携帯電話(モトG第2世代XT1068など)での作業が、レノボA7000のクラッシュを行います。

次のことを確認してください:

  • チェックをあなたのAndroidプラットフォームがAndroid guideに与えられたサポート対象のバージョンに含まれている場合。

  • Google Places API - Troubleshootingに記載されているように、アプリが遭遇する可能性のあるエラーの大部分は通常、設定エラーが原因です。発生したエラーのステータスメッセージを取得するには、onActivityResult()コールバックのPlaceAutocomplete.getStatus()に電話してください。

  • 置きオートコンプリートを使用してオートコンプリートが正しくあなたのアプリケーションに追加された場合Place Autocompleteに与えられたとして、次の方法を使用して、確認してください。
    • は、オートコンプリートウィジェットを追加プログラムで
    • 取得場所の予測

このGitHubポストのGoogle Places Autocomplete does not work on mobileで、対応するコードを関数に配置し、0以下のような目的の要素の式を実行するディレクティブ:

<input id="searchBar" type="text" placeholder="Search" ng-focus="disableTap()"> 

私が直面するもう一つの問題はあります。私は南アフリカの近くに表示されるデフォルトのGoogleマップの場所を変更したいと思います。特定の場所に変更します。どうやってやるの?

  • は、デフォルトのGoogleマップの場所を変更するにして正確な結果を得るために、あなたができるここUpdate your location on Googleに与えられた手順を試してください:
      がオフにあなたの場所を回すか
    • 、および
    • チェックし、あなたの場所を更新

詳細については、該当するドキュメントを参照してください。

私はあなたのために働くことを願っています。

関連する問題