【问题标题】:onResume got error [duplicate]onResume 出错 [重复]
【发布时间】:2017-06-03 20:26:13
【问题描述】:

我这里有个情况。在StartActivity.java onCreate 方法中,我将检查用户是否打开了他们的GPS。如果 GPS 关闭,用户需要打开并进入设置。所以activity 将是onPause。当用户返回应用程序时,它会通过onResume

然后它将移动到另一个名为MainActivity.java 的活动。在这个活动中会生成一张地图。

StartActivity.java

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        if (Utils.isGPSEnabled(this)) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(PERMISSIONS_LOCATION, REQUEST_LOCATION);
            } else {
                proceed();
            }
        } else {
            Utils.T(this, "Please enable your GPS location");
            Intent viewIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(viewIntent);
        }
    }


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


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        switch (requestCode){
            case REQUEST_LOCATION :
                if (Utils.permissionGranted(requestCode, REQUEST_LOCATION, grantResults, 1)){
                    proceed();
                } else {
                    Utils.t(this, "Go to settings and enable permissions");
                }
        }
    }


    public void proceed() {
    new CountDownTimer(3000, 100) {
        public void onTick(long millisUntilFinished) {
            if (Math.round((float)millisUntilFinished / 1000.0f) != countTime) {
                countTime = Math.round((float) millisUntilFinished / 1000.0f);
            }
        }
        public void onFinish() {
            tv_detect.setText("Done!");
            intent = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(intent);
            finish();
        }
    }.start();
}

MainActivity.java

public class MainActivity extends AppCompatActivity implements
        OnMapReadyCallback, LocationListener,
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        View.OnClickListener, GoogleMap.OnMarkerClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buildGoogleApiClient();
    }

    protected synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
    mGoogleApiClient.connect();
   }


   @Override
   protected void onPause() {
    super.onPause();
    // stop location updates when Activity is no longer active
    if (mGoogleApiClient != null) {
        LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
       }
   }

  // The rest of method is already implemented
}

错误:

无法暂停活动 {xx.xxx.com.xxx/xx.xxx.com.xxx.ui.activity.MainActivity}: java.lang.IllegalStateException: GoogleApiClient 尚未连接。

问题:当我将 proceed() 方法放在 onResume 上时发生错误,它会生成两次 MainActivity.java 两次。当我从onResume 中删除proceed() 时,它会正常工作,但我需要使用onResume,因为当活动暂停(用户转到设置以打开 GPS)并返回应用程序时,它会卡住不做任何不方便的事。

非常感谢任何帮助。谢谢

【问题讨论】:

  • 什么是 configview() ?
  • @Enzokie,请参考问题。已经更新问题了。
  • @AJay 这是ui 声明。
  • 尝试将您的 onResume() 更新为:@Override protected void onResume() {proceed();超级.onResume(); }
  • @HonorLT 还是一样。遇到同样的错误。

标签: java android onresume


【解决方案1】:

您需要在 MainActivity.java 的 onPause() 中检查 mGoogleApiClient 是否已连接 所以你应该在 onPause() 中这样做

if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
    LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
   }
}

【讨论】:

  • 我需要把它放在MainActivity.java 上吗?错误发生在StartActivity.java。需要检查(用户是否打开 GPS)发生在StartActivity.java。之后,它将重定向到MainActivity.java
  • 在 MainActivity.java 中是的
  • proceed();StartActivity.java,请您阅读问题。
  • 对不起,您需要在StartActivity中连接googleApiClient并在StartActivity.java中添加isConnected检查
  • 仍然出现错误。你确定我需要在StartActivity.java 连接googleApiClient。
【解决方案2】:

在 onResume() 中检查这个条件,因为当第一次创建 StartActivity.java 时它调用 onResume() 并且当从设置返回时它调用 onResume 第二次。

if (Utils.isGPSEnabled(this)) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(PERMISSIONS_LOCATION, REQUEST_LOCATION);
        } else {
            proceed();
        }
    } else {
        Utils.T(this, "Please enable your GPS location");
        Intent viewIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        startActivity(viewIntent);
    }

【讨论】:

  • 还是报错。另外,proceed() 方法调用了两次。
猜你喜欢
  • 2011-09-22
  • 2017-09-19
  • 2015-10-14
  • 2018-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多