Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Google Fit API获取步数失败_Java_Android_Api_Android Studio_Google Fit - Fatal编程技术网

Java 使用Google Fit API获取步数失败

Java 使用Google Fit API获取步数失败,java,android,api,android-studio,google-fit,Java,Android,Api,Android Studio,Google Fit,登录Google Fit帐户成功,但未显示步骤计数。请帮忙 public class MainActivity extends AppCompatActivity { public static final int GOOGLE_FIT_PERMISSIONS_REQUEST_CODE=101; public static final String TAG="StepCounter"; private static final int REQUEST_OAUTH =

登录Google Fit帐户成功,但未显示步骤计数。请帮忙

public class MainActivity extends AppCompatActivity {

    public static final int GOOGLE_FIT_PERMISSIONS_REQUEST_CODE=101;
    public static  final String TAG="StepCounter";
    private static final int REQUEST_OAUTH = 1;

    private static final String AUTH_PENDING = "auth_state_pending";
    private boolean authInProgress = false;

    private GoogleApiClient mClient = null;
    ProgressBar progressBar;
    public static  Boolean loggedIn=false;


    @Override
    protected void onStart() {
        super.onStart();
        // Connect to the Fitness API
        Log.i(TAG, "Connecting...");
        mClient.connect();
    }

    @Override
    protected void onStop() {
        super.onStop();
        if (mClient.isConnected()) {
            mClient.disconnect();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_OAUTH) {
            authInProgress = false;
            if (resultCode == RESULT_OK) {
                // Make sure the app is not already connected or attempting to connect
                if (!mClient.isConnecting() && !mClient.isConnected()) {
                    mClient.connect();
                }
            }
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar=(ProgressBar)findViewById(R.id.progressBar);



        if (savedInstanceState != null) {
            authInProgress = savedInstanceState.getBoolean(AUTH_PENDING);
        }

        buildFitnessClient();


        new Thread(new Runnable() {       //worker thread adding data to the array list(the data can be from database)



            @Override
            public void run() {



                while(loggedIn) {

                     readData();


                    try {
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }


            }
        }).start();







    }

    private void buildFitnessClient() {

        mClient = new GoogleApiClient.Builder(this)
                .addApi(Fitness.SENSORS_API)
                .addScope(new Scope(Scopes.FITNESS_LOCATION_READ))
                .addConnectionCallbacks(
                        new GoogleApiClient.ConnectionCallbacks() {

                            @Override
                            public void onConnected(Bundle bundle) {
                                Log.i(TAG, "Connected!!!");
                                progressBar.setVisibility(View.INVISIBLE);
                                loggedIn=true;
                                // Now you can make calls to the Fitness APIs.
                                // Put application specific code here.











                            }

                            @Override
                            public void onConnectionSuspended(int i) {
                                // If your connection to the sensor gets lost at some point,
                                // you'll be able to determine the reason and react to it here.
                                if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) {
                                    Log.i(TAG, "Connection lost.  Cause: Network Lost.");
                                } else if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) {
                                    Log.i(TAG, "Connection lost.  Reason: Service Disconnected");
                                }
                            }
                        }
                )
                .addOnConnectionFailedListener(
                        new GoogleApiClient.OnConnectionFailedListener() {
                            // Called whenever the API client fails to connect.
                            @Override
                            public void onConnectionFailed(ConnectionResult result) {
                                Log.i(TAG, "Connection failed. Cause: " + result.toString());
                                if (!result.hasResolution()) {
                                    // Show the localized error dialog
                                    GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(),
                                            MainActivity.this, 0).show();
                                    return;
                                }
                                // The failure has a resolution. Resolve it.
                                // Called typically when the app is not yet authorized, and an
                                // authorization dialog is displayed to the user.
                                if (!authInProgress) {
                                    try {
                                        Log.i(TAG, "Attempting to resolve failed connection");
                                        authInProgress = true;
                                        result.startResolutionForResult(MainActivity.this,
                                                REQUEST_OAUTH);
                                    } catch (IntentSender.SendIntentException e) {
                                        Log.e(TAG,
                                                "Exception while starting resolution activity", e);
                                    }
                                }
                            }
                        }
                )
                .build();







    }
从Google Fit帐户读取步数的函数

private void readData(){
Fitness.getHistoryClient(这个,GoogleSignIn.GetLastSignedAccount(这个))
.readDailyTotal(数据类型.类型\步骤\计数\增量)
.addOnSuccessListener(
新OnSuccessListener(){
@凌驾
成功时的公共void(数据集){
长期总计=
dataSet.isEmpty()
? 0
:dataSet.getDataPoints().get(0).getValue(Field.Field_步骤).asInt();
Log.i(标签“总步数:”+总步数);
Toast.makeText(getApplicationContext(),String.valueOf(total),Toast.LENGTH_SHORT.show();
}
})
.addOnFailureListener(
新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.w(标记“获取步数时出现问题”,e);
Toast.makeText(getApplicationContext(),“error”,Toast.LENGTH_SHORT.show();
}
});
}
}
成功登录后,将调用readData(),但不会收到日志消息或Toast消息


调试时,
readData()
代码正在执行,但没有显示结果。

我正在附加OAuth2.0作用域。确保您已选择所有这些选项


onFailure方法中出现了什么错误?E/GED:无法获取GED日志Buf,错误(0)
  private void readData() {

        Fitness.getHistoryClient(this, GoogleSignIn.getLastSignedInAccount(this))
                .readDailyTotal(DataType.TYPE_STEP_COUNT_DELTA)
                .addOnSuccessListener(
                        new OnSuccessListener<DataSet>() {
                            @Override
                            public void onSuccess(DataSet dataSet) {
                                long total =
                                        dataSet.isEmpty()
                                                ? 0
                                                : dataSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
                                Log.i(TAG, "Total steps: " + total);
                                Toast.makeText(getApplicationContext(),String.valueOf(total),Toast.LENGTH_SHORT).show();
                            }
                        })
                .addOnFailureListener(
                        new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Log.w(TAG, "There was a problem getting the step count.", e);
                                Toast.makeText(getApplicationContext(),"error",Toast.LENGTH_SHORT).show();
                            }
                        });
    }




}