IllegalArgumentException: требуется параметр GoogleApiClient.

Прежде всего извините за этот глупый вопрос. Поскольку я новичок в Android, я пытаюсь создать приложение, в котором сначала откроется диалоговое окно для запроса разрешения на включение GPS, например, Google Maps или ola do. Затем, после этого, я хотел получить широту и долготу пользователя, но, к сожалению, я пытался искать так много ссылок, но не нашел правильного решения. так может ли кто-нибудь помочь мне.

Мой код:

public class GpsPlaceSearch extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener, LocationListener 
{
    Activity context;
    GoogleApiClient googleApiClient, getGoogleApiClient;
    protected static final int REQUEST_CHECK_SETTINGS = 0x1;
    LocationRequest locationRequest1;

    Location location;
    private double currentLatitude;
    private double currentLongitude;
    private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
    private static final int MY_PERMISSIONS_REQUEST_FINE_LOCATION = 111;

    public GpsPlaceSearch(){

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gps_place_search);
        getGoogleApiClient = new GoogleApiClient.Builder(this)
                class will handle connection stuff
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)

                .addApi(LocationServices.API)
                .build();

        locationRequest1=locationRequests();
    }

    public GpsPlaceSearch(Activity context){
        this.context=context;
        googleApiClient=getInstance();
        if (googleApiClient!=null){
            settingsrequest();

            googleApiClient.connect();
        }
    }

    public LocationRequest locationRequests(){
        LocationRequest locationRequest=LocationRequest.create();
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        locationRequest.setInterval(30 * 1000);
        locationRequest.setFastestInterval(5 * 1000);
        return locationRequest;
    }

    public GoogleApiClient getInstance(){
        GoogleApiClient mGoogleApiClient=new GoogleApiClient.Builder(context).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(LocationServices.API).build();
        return mGoogleApiClient;
    }

    public void settingsrequest(){
        Log.e("settingsrequest","Comes");

        locationRequest1=locationRequests();
        LocationSettingsRequest.Builder builder=new LocationSettingsRequest.Builder().addLocationRequest(locationRequest1);

        builder.setAlwaysShow(true);
        final PendingResult<LocationSettingsResult> result= LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
        result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
            @Override
            public void onResult(LocationSettingsResult result) {
                Status status=result.getStatus();
                LocationSettingsStates states=result.getLocationSettingsStates();
                switch (status.getStatusCode()){
                    case LocationSettingsStatusCodes.SUCCESS:

                        break;
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                        try{
                            status.startResolutionForResult(context,REQUEST_CHECK_SETTINGS);
                        } catch (IntentSender.SendIntentException e) {
                            e.printStackTrace();
                        }
                        break;
                    case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:

                        break;
                }
            }
        });
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void onConnected(Bundle bundle) {
        location=LocationServices.FusedLocationApi.getLastLocation(getGoogleApiClient);
        if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
            requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},108);
            LocationServices.FusedLocationApi.requestLocationUpdates(getGoogleApiClient,locationRequest1,this);

        }
        else {

            currentLatitude = location.getLatitude();
            currentLongitude = location.getLongitude();

            Toast.makeText(this, currentLatitude + " AND " + currentLongitude + "", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

        if (connectionResult.hasResolution()){
            try {
                connectionResult.startResolutionForResult(this, CONNECTION_FAILURE_RESOLUTION_REQUEST);
            } catch (IntentSender.SendIntentException e) {
                e.printStackTrace();
            }
        }
        else {
            Log.e("Error", "Location services connection failed with code " + connectionResult.getErrorCode());
        }

    }

    @Override
    protected void onStart() {
        super.onStart();
        Activity mActivity=this;
        GpsPlaceSearch gpsPlaceSearch=new GpsPlaceSearch(mActivity);
    }

    @Override
    protected void onResume() {
        super.onResume();
        //Now lets connect to the API
        getGoogleApiClient.connect();
    }

    @Override
    protected void onPause() {
        super.onPause();

        if (getGoogleApiClient.isConnected()){
            LocationServices.FusedLocationApi.removeLocationUpdates(getGoogleApiClient,this);
            getGoogleApiClient.disconnect();
        }

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        LocationSettingsStates states=LocationSettingsStates.fromIntent(data);
        switch (requestCode){
            case REQUEST_CHECK_SETTINGS:
                switch (resultCode){
                    case Activity.RESULT_OK:
                        break;
                    case Activity.RESULT_CANCELED:
                        startActivity(new Intent(getApplicationContext(),Login_page.class));
                        break;
                }
                break;
        }
    }

    @Override
    public void onLocationChanged(Location location) {

        currentLatitude = location.getLatitude();
        currentLongitude = location.getLongitude();
        Toast.makeText(this, currentLatitude + " WORKS " + currentLongitude + "", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_FINE_LOCATION:
                if (grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){

                }
                else {

                }
                return;
        }
    }
}

Логкат:

Вы должны удалить строку ниже из onConnected.


person Vishal rana    schedule 29.03.2017    source источник
comment
Что находится в строке № 128 в вашем классе?   -  person Jon Skeet    schedule 29.03.2017
comment
это дает мне исключение нулевого указателя, что требуется параметр googleapiclient, но я инициализировал googleapiclient   -  person Vivek Mishra    schedule 29.03.2017
comment
@VivekMishra, строка 128: location=LocationServices.FusedLocationApi.getLastLocation(getGoogleApiClient);   -  person Vishal rana    schedule 29.03.2017
comment
Из того, что вы опубликовали, это недопустимое исключение аргумента, а не нулевой указатель   -  person Vishal rana    schedule 29.03.2017
comment
@VivekMishra о, да, моя ошибка, это исключение из-за недопустимого аргумента   -  person Vivek Mishra    schedule 29.03.2017
comment
@VivekMishra, не могли бы вы сказать мне, в чем проблема в моем коде, и помочь мне?   -  person Vishal rana    schedule 29.03.2017
comment
stackoverflow.com/questions/35825061 / проверить эту ссылку   -  person Vishal rana    schedule 29.03.2017
comment
@VivekMishra, как вы можете видеть в моем коде, я инициализировал googleapiclient в своем oncreate, но все же это дает мне исключение.   -  person Vivek Mishra    schedule 29.03.2017
comment
вы инициализировали его дважды, поэтому сначала проверьте, какой из них вы используете, отладьте свой код и проверьте, правильно ли он инициализирован или нет.   -  person Vishal rana    schedule 29.03.2017
comment
Почему бы не позвонить _1_ из _2_?   -  person Vivek Mishra    schedule 29.03.2017


Ответы (1)


и должен вызывать только метод requestLocationUpdates в onConnected

 location=LocationServices.FusedLocationApi.getLastLocation(getGoogleApiClient);

Так что же происходит с вашим текущим кодом? Можете ли вы сократить его до более минимального примера? (На данный момент вы разместили около 200 строк кода — я сомневаюсь, что весь полностью необходим для демонстрации проблемы.)

@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onConnected(Bundle bundle) {

    if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
        requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},108);
        LocationServices.FusedLocationApi.requestLocationUpdates(getGoogleApiClient,locationRequest1,this);

    } 
}else{
    //custom dialog for "please enable location permission to access device location"
}
person Kishore Jethava    schedule 29.03.2017
comment
НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.bigfoot.trialapp, PID: 17660 java.lang.IllegalArgumentException: требуется параметр GoogleApiClient. на com.google.android.gms.common.internal.zzaa.zzb (неизвестный источник) на com.google.android.gms.location.LocationServices.zzj (неизвестный источник) на com.google.android.gms.location.internal .zzd.getLastLocation(неизвестный источник) в com.bigfoot.trialapp.GpsPlaceSearch.onConnected(GpsPlaceSearch.java:128) в com.google.android.gms.common.internal.zzk.zzp(неизвестный источник) в com.google. android.gms.internal.zzrd.zzn (неизвестный источник) на com.google.android.gms.internal.zzrb.zzass (неизвестный источник) на com.google.android.gms.internal.zzrb.onConnected(неизвестный источник) на com.google.android.gms.internal.zzrf.onConnected(неизвестный источник) на com.google.android.gms.internal.zzqr.onConnected (неизвестный источник) на com.google.android.gms.common.internal.zzj$1.onConnected(неизвестный источник) на com.google.android.gms.common.internal.zze$zzj.zzavj(неизвестный источник) на com. google.android.gms.common.internal.zze$zza.zzc(неизвестный источник) на com.google.android.gms.common.internal.zze$zza.zzv(неизвестный источник) на com.google.android.gms.common.internal.zze$zze.zzavl(неизвестный источник) на com.google.android.gms.common.internal.zze$zzd.handleMessage(неизвестный источник) на android.os. Handler.dispatchMessage(Handler.java:102) в android.os.Looper.loop(Looper.java:148) в android.app.ActivityThread.main(ActivityThread.java:5443) в java.lang.reflect.Method.invoke (Собственный метод) на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) - person Atul; 08.03.2018