2017-05-01 17 views
0

私はフィットネスのAPIを使用して歩数計を作ろうとしています。私は歩数を数えて、Googleのサービスにアプリを接続しました。今私は私のアプリの進捗バーを作ろうとしているが、私はそれが私が今までに書いたコードであるフィットネスAPIの値フォームで動作させる方法を知らない。申し訳ありませんが、私はこの質問を2倍(私は前に検索した)です。Progress Bar with Fit Api

`public class MainActivity extends AppCompatActivity implements OnDataPointListener, 
    GoogleApiClient.ConnectionCallbacks, 
    GoogleApiClient.OnConnectionFailedListener { 


private static final int REQUEST_OAUTH = 1; 
private static final String AUTH_PENDING = "auth_state_pending"; 
private boolean authInProgress = false; 
private GoogleApiClient mApiClient; 
private ProgressBar progressBar; 
private Value progressStatus = 0; 
private Handler handler = new Handler(); 
private TextView textView; 





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

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

    mApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Fitness.SENSORS_API) 
      .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE)) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 


} 
@Override 
protected void onStart(){ 
    progressStatus = 0; 
    super.onStart(); 
    mApiClient.connect(); 
} 

@Override 
public void onConnected(Bundle bundle) { 
    DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder() 
      .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE) 
      .setDataSourceTypes(DataSource.TYPE_RAW) 
      .build(); 

    ResultCallback<DataSourcesResult> dataSourcesResultCallback = new ResultCallback<DataSourcesResult>() { 
     @Override 
     public void onResult(DataSourcesResult dataSourcesResult) { 
      for(DataSource dataSource : dataSourcesResult.getDataSources()) { 
       if(DataType.TYPE_STEP_COUNT_CUMULATIVE.equals(dataSource.getDataType())) { 
        registerFitnessDataListener(dataSource, DataType.TYPE_STEP_COUNT_CUMULATIVE); 
       } 
      } 
     } 
    }; 

    Fitness.SensorsApi.findDataSources(mApiClient, dataSourceRequest) 
      .setResultCallback(dataSourcesResultCallback); 
} 
private void registerFitnessDataListener(DataSource dataSource, DataType dataType) { 

    SensorRequest request = new SensorRequest.Builder() 
      .setDataSource(dataSource) 
      .setDataType(dataType) 
      .setSamplingRate(3, TimeUnit.SECONDS) 
      .build(); 

    Fitness.SensorsApi.add(mApiClient, request, this) 
      .setResultCallback(new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        if (status.isSuccess()) { 
         Log.e("GoogleFit", "SensorApi successfully added"); 
        } 
       } 
      }); 
} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
    if(!authInProgress){ 
     try{ 
      authInProgress = true; 
      connectionResult.startResolutionForResult(MainActivity.this,REQUEST_OAUTH); 
     } catch (IntentSender.SendIntentException e){} 

    }else { 
     Log.e("GoogleFit" , "authInProgress"); 
    } 


} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == REQUEST_OAUTH) { 
     authInProgress = false; 
     if(resultCode == RESULT_OK) { 
      if(!mApiClient.isConnecting() && !mApiClient.isConnected()) { 
       mApiClient.connect(); 
      } 
     } else if(resultCode == RESULT_CANCELED) { 
      Log.e("GoogleFit", "RESULT_CANCELED"); 
     } 
    } else { 
     Log.e("GoogleFit", "requestCode NOT request_oauth"); 
    } 
} 
@Override 
public void onDataPoint(DataPoint dataPoint) { 
    for(final Field field : dataPoint.getDataType().getFields()) { 
     final Value value = dataPoint.getValue(field); 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       Toast.makeText(getApplicationContext(), "Field: " + field.getName() + " Value: " + value, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     progressBar = (ProgressBar) findViewById(R.id.progressBar3); 
     textView = (TextView) findViewById(R.id.textView); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       while (progressStatus){ 
        progressStatus = value; 
        handler.post(new Runnable() { 
         public void run() { 
           progressBar.setProgress(progressStatus); 
           textView.setText("Progress:"+progressStatus+"/"+progressBar.getMax()); 
          } 
         }); 
        } 
        try{Thread.sleep(100);} 
        catch (InterruptedException e){ 
         e.printStackTrace(); 
        } 
       } 
      }); 
     } 




} 


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

    Fitness.SensorsApi.remove(mApiClient, this) 
      .setResultCallback(new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        if (status.isSuccess()) { 
         mApiClient.disconnect(); 
        } 
       } 
      }); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putBoolean(AUTH_PENDING, authInProgress); 
} 

}

`

+0

がありますか? –

+1

ProgressBarのsetProgressを(com.google.android.gms.fitness.data.Value) –

+0

に適用することはできません。エラーの場合は、 'while(progressStatus)' ... –

答えて

0
public class MainActivity extends AppCompatActivity implements OnDataPointListener, 
    GoogleApiClient.ConnectionCallbacks, 
    GoogleApiClient.OnConnectionFailedListener { 


private static final int REQUEST_OAUTH = 1; 
private static final String AUTH_PENDING = "auth_state_pending"; 
private boolean authInProgress = false; 
private GoogleApiClient mApiClient; 
private ProgressBar progressBar; 
private int progressStatus=0; 
private Handler handler= new Handler(); 
private TextView textView; 
private Button toastButton; 




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

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

    mApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Fitness.SENSORS_API) 
      .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE)) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 
    toastButton = (Button) findViewById(R.id.show_toast); 
    progressBar = (ProgressBar) findViewById(R.id.progressBar3); 


} 
@Override 
protected void onStart(){ 
    super.onStart(); 
    mApiClient.connect(); 
} 

@Override 
public void onConnected(Bundle bundle) { 
    DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder() 
      .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE) 
      .setDataSourceTypes(DataSource.TYPE_RAW) 
      .build(); 

    ResultCallback<DataSourcesResult> dataSourcesResultCallback = new ResultCallback<DataSourcesResult>() { 
     @Override 
     public void onResult(DataSourcesResult dataSourcesResult) { 
      for(DataSource dataSource : dataSourcesResult.getDataSources()) { 
       if(DataType.TYPE_STEP_COUNT_CUMULATIVE.equals(dataSource.getDataType())) { 
        registerFitnessDataListener(dataSource, DataType.TYPE_STEP_COUNT_CUMULATIVE); 
       } 
      } 
     } 
    }; 

    Fitness.SensorsApi.findDataSources(mApiClient, dataSourceRequest) 
      .setResultCallback(dataSourcesResultCallback); 
} 
private void registerFitnessDataListener(DataSource dataSource, DataType dataType) { 

    SensorRequest request = new SensorRequest.Builder() 
      .setDataSource(dataSource) 
      .setDataType(dataType) 
      .setSamplingRate(3, TimeUnit.SECONDS) 
      .build(); 

    Fitness.SensorsApi.add(mApiClient, request, this) 
      .setResultCallback(new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        if (status.isSuccess()) { 
         Log.e("GoogleFit", "SensorApi successfully added"); 
        } 
       } 
      }); 
} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
    if(!authInProgress){ 
     try{ 
      authInProgress = true; 
      connectionResult.startResolutionForResult(MainActivity.this,REQUEST_OAUTH); 
     } catch (IntentSender.SendIntentException e){} 

    }else { 
     Log.e("GoogleFit" , "authInProgress"); 
    } 


} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == REQUEST_OAUTH) { 
     authInProgress = false; 
     if(resultCode == RESULT_OK) { 
      if(!mApiClient.isConnecting() && !mApiClient.isConnected()) { 
       mApiClient.connect(); 
      } 
     } else if(resultCode == RESULT_CANCELED) { 
      Log.e("GoogleFit", "RESULT_CANCELED"); 
     } 
    } else { 
     Log.e("GoogleFit", "requestCode NOT request_oauth"); 
    } 
} 
@Override 
public void onDataPoint(DataPoint dataPoint) { 
    for(final Field field : dataPoint.getDataType().getFields()) { 
     final Value value = dataPoint.getValue(field); 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       textView = (TextView) findViewById(R.id.textView); 
       textView.setText(field.getName()+ ": " + value); 
       textView = (TextView) findViewById(R.id.textView); 
       progressStatus = value.asInt(); 
       handler.post(new Runnable() { 
           public void run() { 
            progressBar.setProgress(progressStatus); 
           } 
          }); 
      } 
     }); 

     toastButton.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v){ 
       Toast.makeText(getApplicationContext(), "Field: " + field.getName() + " Value: " + value, Toast.LENGTH_SHORT).show(); 
      } 
     }); 


    } 
} 










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

    Fitness.SensorsApi.remove(mApiClient, this) 
      .setResultCallback(new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        if (status.isSuccess()) { 
         mApiClient.disconnect(); 
        } 
       } 
      }); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putBoolean(AUTH_PENDING, authInProgress); 
    } 
} 

これは、` `progressBar.setProgress(progressStatus)の何が問題になって作業コード

関連する問題