2017-10-11 14 views
2

버튼을 클릭 할 때 코드가 실행되는 동안 앱이 즉시 중단됩니다.Google 맞춤 통합 UI 스레드 기록 결과를 요청하는 동안 오류가 발생했습니다.

Caused by: java.lang.IllegalStateException: await must not be called on the UI thread when time is greater than zero. 
at com.google.android.gms.common.internal.zzbo.zza(Unknown Source) 
at com.google.android.gms.internal.zzbbd.await(Unknown Source) 
at com.gfit.test.mygfitapp.MainActivity.onStart(MainActivity.java:154) 

버튼 클릭 방법은 코드 다음이 포함되어 오류 다음 쇼를 로그인합니다. 로그에서 언급 한 바와 같이

Calendar calendar = Calendar.getInstance(); 
      Date date = new Date(); 
      calendar.setTime(date); 
      long endTime = calendar.getTimeInMillis(); 
      calendar.add(Calendar.YEAR, -1); 
      long startTime = calendar.getTimeInMillis(); 

     DataReadRequest dataReadRequest = new DataReadRequest.Builder() 
       .read(DataType.TYPE_WEIGHT) 
       .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) 
       .setLimit(1) 
       .build(); 


DataReadResult dataReadResult = Fitness.HistoryApi.readData(mApiClient, dataReadRequest).await(1000, TimeUnit.MILLISECONDS); 
      Toast.makeText(getApplicationContext(),""+dataReadResult.toString(),Toast.LENGTH_LONG).show(); 

그것은 UI 스레드에서 실행할 수 없습니다. 코드를 실행하는 다른 방법은 무엇입니까? 당신이 배경 스레드 코드를 이동해야 같은 오류가 말한대로

+0

이 보인다. –

+0

backgound에서 참조 코드 실행 프로세스를 제안 할 수 있습니까? –

+0

당신은 프로세스를 실행할 필요가 없습니다, 당신은'안드로이드'백그라운드 스레드에서 코드를 실행하는 방법을 찾아야합니다. << - 이것을 구글에서 사용하십시오. –

답변

2

코드를 작성 이러한 유형의

private class InsertAndVerifyDataTask extends AsyncTask<Void, Void, Void> { 

     protected Void doInBackground(Void... params) { 
      Calendar calendar = Calendar.getInstance(); 
      Date date = new Date(); 
      calendar.setTime(date); 
      long endTime = calendar.getTimeInMillis(); 
      calendar.add(Calendar.YEAR, -1); 
      long startTime = calendar.getTimeInMillis(); 

     DataReadRequest dataReadRequest = new DataReadRequest.Builder() 
       .read(DataType.TYPE_WEIGHT) 
       .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) 
       .setLimit(1) 
       .build(); 


DataReadResult dataReadResult = Fitness.HistoryApi.readData(mApiClient, dataReadRequest).await(1000, TimeUnit.MILLISECONDS); 

if (dataReadResult.getBuckets().size() > 0) { 
      Log.i(TAG, "Number of returned buckets of DataSets is: " 
        + dataReadResult.getBuckets().size()); 

      for (Bucket bucket : dataReadResult.getBuckets()) { 
       List<DataSet> dataSets = bucket.getDataSets(); 

       for (DataSet dataSet : dataSets) { 
        dumpDataSet(dataSet); 

       } 
      } 
     } else if (dataReadResult.getDataSets().size() > 0) { 
      Log.i(TAG, "Number of returned DataSets is: " 
        + dataReadResult.getDataSets().size()); 

      for (DataSet dataSet : dataReadResult.getDataSets()) { 
       dumpDataSet(dataSet); 
      } 
     } 
      return null; 
     } 
    } 

private void dumpDataSet(DataSet dataSet) { 
     for (DataPoint dp : dataSet.getDataPoints()) { 
      List<Field> field = dp.getDataType().getFields(); 
      if (field.get(0).getName().equalsIgnoreCase("activity")) { 
       if (dp.getValue(field.get(0)).asActivity() 
         .equalsIgnoreCase("walking")) { 
        walkingTime = TimeUnit.MILLISECONDS.toSeconds(dp.getValue(
          field.get(1)).asInt()); 

        Log.e("walking", walkingTime + ""); 
       } 

       if (dp.getValue(field.get(0)).asActivity() 
         .equalsIgnoreCase("biking")) { 
        cyclingTime = TimeUnit.MILLISECONDS.toSeconds(dp 
          .getValue(field.get(1)).asInt()); 

        Log.e("biking", cyclingTime + ""); 
       } 
       if (dp.getValue(field.get(0)).asActivity() 
         .equalsIgnoreCase("in_vehicle")) { 
        travelingTime = TimeUnit.MILLISECONDS.toSeconds(dp 
          .getValue(field.get(1)).asInt()); 
        Log.e("in_vehicle", travelingTime + ""); 
       } 
       if (dp.getValue(field.get(0)).asActivity() 
         .contains("running")) { 
        runningTime = TimeUnit.MILLISECONDS.toSeconds(dp 
          .getValue(field.get(1)).asInt()); 

        Log.e("running", runningTime + ""); 
       } 
      } else if (field.get(0).getName().equalsIgnoreCase("steps")) { 

       steps = dp.getValue(field.get(0)).asInt(); 

       Log.e("steps", "" + steps); 
      } 
     } 
    }