2017-05-21 1 views
2

내 Android 용 Google BigQuery를 사용하려고합니다. 불행히도이 주제에 대한 자습서를 찾을 수 없었습니다. 저를 도와 android.os.NetworkOnMainThreadExceptionandroid에서 Google BigQuery 사용

하십시오 는 그래서이 클래스의 시작 메서드를 호출하는 것을 시도하고있다 :

public class BigQuery { 
public static Bigquery createAuthorizedClient() throws IOException { 
    // Create the credential 
    HttpTransport transport = new NetHttpTransport(); 
    JsonFactory jsonFactory = new JacksonFactory(); 
    GoogleCredential credential = GoogleCredential.getApplicationDefault(transport, jsonFactory); 

    if (credential.createScopedRequired()) { 
     credential = credential.createScoped(BigqueryScopes.all()); 
    } 

    return new Bigquery.Builder(transport, jsonFactory, credential) 
      .setApplicationName("Bigquery Samples") 
      .build(); 
} 
private static List<TableRow> executeQuery(String querySql, Bigquery bigquery, String projectId) 
     throws IOException { 
    QueryResponse query = 
      bigquery.jobs().query(projectId, new QueryRequest().setQuery(querySql)).execute(); 

    // Execute it 
    GetQueryResultsResponse queryResult = 
      bigquery 
        .jobs() 
        .getQueryResults(
          query.getJobReference().getProjectId(), query.getJobReference().getJobId()) 
        .execute(); 

    return queryResult.getRows(); 
} 


private static void displayResults(List<TableRow> rows) { 
    System.out.print("\nResults:\n------------\n"); 
    for (TableRow row : rows) { 
     for (TableCell field : row.getF()) { 
      System.out.printf("%-50s", field.getV()); 
     } 
     System.out.println(); 
    } 
} 

public static void main(String[] args) throws IOException { 

    String projectId = "ukrbikeapp"; 

    // Create a new Bigquery client authorized via Application Default Credentials. 
    Bigquery bigquery = createAuthorizedClient(); 

    List<TableRow> rows = 
      executeQuery(
        "SELECT COUNT(event_dim.name) as DefeatEvents,\n" + 
          "event_dim.params.value.string_value as CharacterClass\n" + 
          "FROM [ukrbikeapp:info_firebase_ANDROID.app_events]\n" + 
          "WHERE event_dim.name = 'select_content'\n" + 
          "AND event_dim.params.key = 'item_name'\n" + 
          "GROUP BY CharacterClass\n" + 
          "ORDER BY DefeatEvents desc", 
        bigquery, 
        projectId); 

    displayResults(rows); 
} 
} 

을하지만 그때 나는

E /의 uncaughtException를 얻을 수 이 문제를 해결하십시오.

답변

0

이것은 네트워크를 기다리는 동안 앱이 정지되는 UI를 방지하는 데 도움이됩니다. 문제를 해결하려면 AsyncTask을 사용하여 별도의 스레드에서 쿼리를 수행 한 다음 결과에 따라 UI를 업데이트하십시오. AyncTask Android example을 살펴보십시오.