0

私は、(融合テーブルに保存された)関心のあるポイントをGoogleマップ上に表示する方法の例を探しています。 Fusion Tables v2 Googleマップ上のPOI:Androidの例?

がHTMLでこれを行うと、それは非常に些細なのJavaScript、チェックするために私の javascript map with fusion tables example

を参照してくださいFusion Tables page containing my POIs

私の目標/質問はAndroidアプリで同じことを達成するためにどのように(それをコーディングで助けを必要とする)です。私はアンドロイドの開発に慣れていないので、すでに基本とドキュメントとサンプルを確認する時間を費やしています。

この非常に良いを確認してくださいGoogle Maps example for Android私は(私のテストアプリケーションは、このコードに基づいて)始めることがわかった。

Fusion Tables v2 reference(GoogleのAPIクライアントへのポイント)

Google API Java client samples on github(最も古く:V1の例)

は、これまでのところ、私は私の最後の既知の場所を中心にマップを表示するには、その上にマーカーを表示するために達成。

私は、このための良い例を見つけることができませんでしたので、私は公開と私の調査結果を共有し、参照することを決めた。firepol/android-google-maps-fusion-tables on github

今私はフュージョンテーブルからのマーカーを表示したいと思います。 Google apiクライアント経由でリクエストを実行しようとしています。

Google API client example for Android

ActivityFeed feed = listActivities.execute(); 

ここで(私はのonCreate内で置かれている)私のコード:

protected void prepareFusion() { 
    // Normally READONLY should be enough (see credential with one scope), but I checked online a console 
    // and I could see a public table only if I would grant both permissions 
    List<String> scopes = new ArrayList<>(Arrays.asList(FusiontablesScopes.FUSIONTABLES, FusiontablesScopes.FUSIONTABLES_READONLY)); 
    credential = GoogleAccountCredential.usingOAuth2(this, scopes); 
    //credential = GoogleAccountCredential.usingOAuth2(this, Collections.singleton(FusiontablesScopes.FUSIONTABLES_READONLY)); 

    // TODO : get account name automatically 
    // http://stackoverflow.com/questions/35789071/getting-the-gmail-id-of-the-user-in-android-6-0-marshmallow 
    credential.setSelectedAccountName("YOUR_GOOGLE_ACCOUNT"); 

    client = new Fusiontables.Builder(
      transport, jsonFactory, credential).setApplicationName("TestMap/1.0") 
      .build(); 

    try { 
     String tableId = "1774o_WcrqSQlepLXlz1kgH_01NpCJ-6OyId9Pm1J"; 

     Fusiontables.Query.Sql sql = client.query().sql("SELECT FileName,Name,Location FROM " + tableId); 
     //sql.execute(); 
     //java.lang.IllegalStateException: Calling this from your main thread can lead to deadlock 

     Fusiontables.Table.Get table = client.table().get(tableId); 
     table.setFields("items(FileName,Name,Location)"); 
     //table.execute(); 

     // TODO : can't execute like this on main thread as the documentation example "suggests" 
     //https://developers.google.com/api-client-library/java/google-api-java-client/android 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

私は同じことを行うと(sql.executeを呼び出そうとした場合)、またはtable.execute ()私は得る:

java.lang.IllegalStateException:あなたのメインスレッド からこれを呼び出すデッドロックK

は、だから私はちょっとここにこだわって、あなたがマップ上の結果を得るために私を助けることができる場合、私はより良いGoogleのAPIクライアントとの経験を持っている誰かから続行する方法を知りたいです!ありがとうございました。

マップ上に融合表POIを表示するにはどうすればよいですか?

​​

私がこだわっている場所を確認し、私を助け、私のgithubのレポfirepol/android-google-maps-fusion-tables on githubのクローンを作成し、Androidのメーカーで開き、独自のGoogleマップAPIキーとお使いのデバイス上でデバッグを追加します。あなたの建設的なコメント、回答、お手伝いをありがとう。自由にギットブップを押してください。

答えて

0

This commit implements the fusion tables query and shows the resulting POIs on google maps

説明:GoogleAccountCredentialが間違っていたとGoogleCredentialに置き換えなければなりませんでした。この作業を行うにはcreate a service account、ロールプロジェクト>サービスアカウントの俳優(秘密鍵を生成する)、jsonファイルをダウンロードしてapp/res/raw/service_account_credentials.jsonの下に置く必要がありますこの正確な名前を持つこのファイルですが、あなたのニーズにランナムを付けてコードを適応させてください)。

プロジェクトのAPIマネージャでFusion Tables APIを有効にしてください。

私はAsyncTaskから派生したクラスも実装して、メインスレッドの問題を解決しました。

コミットに少しリファクタリングがあります(LatLngに変更された場所)が、それだけです。

アンドロイドアプリを作成して融合表を配置する必要がある人は、Googleマップ上のPOIを使ってgithubリポジトリをクローンして、何かを開始することができます(私の質問の最初のアイデアでした)。

0

UI /メインスレッドでアンドロイドネットワークの呼び出しが行われません。

完全なプロジェクトを開発している場合は、動作を確認したり、volley/robospiceのようなネットワーキングライブラリをインポートしたい場合は、非同期タスクを使用してみてください。

+0

Thx。更新されたチュートリアルやコードサンプルを使ってAsync Taskをgoogle apiクライアントと一緒に使用しましたか?Robospiceなどを見て、実際にそれらを比較するための優れたイントロを見つけました:https://www.reddit.com/r/androiddev/comments/3d1iim/retrofit_volley_or_robospice_and_jackson_or_gson / – firepol

関連する問題