Java 当时间大于零时,不得在UI线程上调用wait

Java 当时间大于零时,不得在UI线程上调用wait,java,android,fitness,Java,Android,Fitness,我试图使用fitness api在android上显示上周的数据,但出现以下错误: E/AndroidRuntime:致命异常:主 进程:com.example.admin.u计数器,PID:7435 java.lang.IllegalStateException:当时间大于零时,不得在UI线程上调用await。 位于com.google.android.gms.common.internal.premissions.checkNotMainThread(未知 (来源) 位于com.google

我试图使用fitness api在android上显示上周的数据,但出现以下错误:

E/AndroidRuntime:致命异常:主 进程:com.example.admin.u计数器,PID:7435 java.lang.IllegalStateException:当时间大于零时,不得在UI线程上调用await。 位于com.google.android.gms.common.internal.premissions.checkNotMainThread(未知 (来源) 位于com.google.android.gms.common.api.internal.basependingreult.await(未知 (来源) 位于com.example.admin.safety\u counter.MainActivity.displayLastWeeksData(MainActivity.java:99) 位于com.example.admin.safety_counter.MainActivity.onConnected(MainActivity.java:149) 访问com.google.android.gms.common.internal.GmsClientEventManager.onConnectionSuccess(未知) (来源) 位于com.google.android.gms.common.api.internal.zzav.zzb(未知来源) 位于com.google.android.gms.common.api.internal.zzaj.zzat(未知来源) 位于com.google.android.gms.common.api.internal.zzaj.onConnected(未知 (来源) 位于com.google.android.gms.common.api.internal.zzbd.onConnected(未知 (来源) 位于com.google.android.gms.common.api.internal.zzp.onConnected(未知 (来源) 位于com.google.android.gms.common.internal.zzf.onConnected(未知来源) 位于com.google.android.gms.common.internal.BaseGmsClient$PostInitCallback.handleServiceSuccess(未知 (来源) 在com.google.android.gms.common.internal.BaseGmsClient$zza.deliverCallback(未知)上 (来源) 在com.google.android.gms.common.internal.BaseGmsClient$zza.deliverCallback(未知)上 (来源) 位于com.google.android.gms.common.internal.BaseGmsClient$CallbackProxy.deliverCallback(未知 (来源) 在com.google.android.gms.common.internal.BaseGmsClient$zzb.handleMessage上(未知 (来源) 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:154) 位于android.app.ActivityThread.main(ActivityThread.java:6123) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)上 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)

MainActivity.java

public class MainActivity extends AppCompatActivity implements
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        View.OnClickListener {

    private Button mButtonViewWeek;
    private Button mButtonViewToday;
    private Button mButtonAddSteps;
    private Button mButtonUpdateSteps;
    private Button mButtonDeleteSteps;

    private GoogleApiClient mGoogleApiClient;

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

        mButtonViewWeek = (Button) findViewById(R.id.btn_view_week);
        mButtonViewToday = (Button) findViewById(R.id.btn_view_today);
        mButtonAddSteps = (Button) findViewById(R.id.btn_add_steps);
        mButtonUpdateSteps = (Button) findViewById(R.id.btn_update_steps);
        mButtonDeleteSteps = (Button) findViewById(R.id.btn_delete_steps);

        mButtonViewWeek.setOnClickListener(this);
        mButtonViewToday.setOnClickListener(this);
        mButtonAddSteps.setOnClickListener(this);
        mButtonUpdateSteps.setOnClickListener(this);
        mButtonDeleteSteps.setOnClickListener(this);

        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(Fitness.HISTORY_API)
                .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
                .addConnectionCallbacks(this)
                .enableAutoManage(this, 0, this)
                .build();
    }

    private class ViewWeekStepCountTask extends AsyncTask<Void, Void, Void> {
        protected Void doInBackground(Void... params) {
            displayLastWeeksData();
            return null;
        }
    }

    public void displayLastWeeksData(){
        Calendar cal = Calendar.getInstance();
        Date now = new Date();
        cal.setTime(now);
        long endTime = cal.getTimeInMillis();
        cal.add(Calendar.WEEK_OF_YEAR, -1);
        long startTime = cal.getTimeInMillis();

        java.text.DateFormat dateFormat = DateFormat.getDateInstance();
        Log.e("History", "Range Start: " + dateFormat.format(startTime));
        Log.e("History", "Range End: " + dateFormat.format(endTime));

//Check how many steps were walked and recorded in the last 7 days
        final DataReadRequest readRequest = new DataReadRequest.Builder()
                .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
                .bucketByTime(1, TimeUnit.DAYS)
                .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                .build();

        final DataReadResult dataReadResult = Fitness.HistoryApi.readData(mGoogleApiClient, readRequest).await(1,TimeUnit.MINUTES);
//Used for aggregated data
        if (dataReadResult.getBuckets().size() > 0) {
            Log.e("History", "Number of buckets: " + dataReadResult.getBuckets().size());
            for (Bucket bucket : dataReadResult.getBuckets()) {
                List<DataSet> dataSets = bucket.getDataSets();
                for (DataSet dataSet : dataSets) {
                    showDataSet(dataSet);
                }
            }
        }
//Used for non-aggregated data
        else if (dataReadResult.getDataSets().size() > 0) {
            Log.e("History", "Number of returned DataSets: " + dataReadResult.getDataSets().size());
            for (DataSet dataSet : dataReadResult.getDataSets()) {
                showDataSet(dataSet);
            }
        }

    }

    private void showDataSet(DataSet dataSet) {
        Log.e("History", "Data returned for Data type: " + dataSet.getDataType().getName());
        DateFormat dateFormat = DateFormat.getDateInstance();
        DateFormat timeFormat = DateFormat.getTimeInstance();

        for (DataPoint dp : dataSet.getDataPoints()) {
            Log.e("History", "Data point:");
            Log.e("History", "\tType: " + dp.getDataType().getName());
            Log.e("History", "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)) + " " + timeFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)));
            Log.e("History", "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS)) + " " + timeFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)));
            for(Field field : dp.getDataType().getFields()) {
                Log.e("History", "\tField: " + field.getName() +
                        " Value: " + dp.getValue(field));
            }
        }
    }

    @Override
    public void onConnectionSuspended(int i) {
        Log.e("HistoryAPI", "onConnectionSuspended");
    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        Log.e("HistoryAPI", "onConnectionFailed");
    }
@Override
    public void onConnected(@Nullable Bundle bundle) {
        Log.e("HistoryAPI", "onConnected");
        displayLastWeeksData();
    }


    @Override
    public void onClick(View v) {
    }
}
public类MainActivity扩展了AppCompatActivity实现
GoogleAppClient.ConnectionCallbacks,
GoogleAppClient.OnConnectionFailedListener,
View.OnClickListener{
私人按钮mbutonviewweek;
私人按钮mbutonviewToday;
私人按钮mbutotonaddsteps;
私有按钮mButtonUpdateSteps;
私人按钮mbuttondelete步骤;
私人GoogleapClient MGoogleapClient;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mbutonviewweek=(按钮)findViewById(R.id.btn\u view\u week);
mButtonViewToday=(按钮)findViewById(R.id.btn\u视图\u今天);
mbutonaddsteps=(按钮)findViewById(R.id.btn\u添加步骤);
mButtonUpdateSteps=(按钮)findviewbyd(R.id.btn\u update\u steps);
mbuttonedeletesteps=(按钮)findViewById(R.id.btn\u delete\u步骤);
mbutonviewweek.setOnClickListener(此);
mbutonviewtoday.setOnClickListener(此);
mbutonaddsteps.setOnClickListener(此);
mButtonUpdateSteps.setOnClickListener(此);
mButtonDeleteSteps.setOnClickListener(此);
mgoogleapclient=新的Googleapclient.Builder(此)
.addApi(健身历史\ U API)
.addScope(新范围(范围.适应度\活动\读\写))
.addConnectionCallbacks(此)
.enableAutoManage(this,0,this)
.build();
}
私有类ViewWeekStepCountTask扩展了AsyncTask{
受保护的Void doInBackground(Void…参数){
displayLastWeeksData();
返回null;
}
}
public void displayLastWeeksData(){
Calendar cal=Calendar.getInstance();
现在日期=新日期();
校准设定时间(现在);
long-endTime=cal.getTimeInMillis();
cal.add(日历周,每年,-1);
long startTime=cal.getTimeInMillis();
java.text.DateFormat DateFormat=DateFormat.getDateInstance();
Log.e(“历史”,“范围开始:”+dateFormat.format(startTime));
Log.e(“历史记录”,“范围结束:”+dateFormat.format(endTime));
//检查在过去7天内走了多少步并记录了多少步
final DataReadRequest readRequest=new DataReadRequest.Builder()
.aggregate(DataType.TYPE\u STEP\u COUNT\u DELTA,DataType.aggregate\u STEP\u COUNT\u DELTA)
.bucketByTime(1,时间单位:天)
.setTimeRange(开始时间、结束时间、时间单位.毫秒)
.build();
final DataReadResult DataReadResult=Fitness.HistoryApi.readData(mGoogleApiClient,readRequest).wait(1,TimeUnit.MINUTES);
//用于聚合数据
如果(dataReadResult.GetBucket().size()>0){
Log.e(“历史记录”,“存储桶数:”+dataReadResult.GetBucket().size());
for(Bucket:dataReadResult.getbucket()){
List dataSets=bucket.getDataSets();
用于(数据集:数据集){
showDataSet(数据集);
}
}
}
//用于非聚合数据
else if(dataReadResult.getDataSet