トップページ > 記事閲覧
Androidでサーバと連携したい
名前:たけのこ 日時: 2020/03/02 18:00

DxLibを利用してandroidで簡単なゲームを作成している初心者です。 ソケット通信を利用してphpのapiを呼び出しMysqlにスコアを保存し,クライアント側でスコアランキングのようなものを表示したいと考えております。 始めにc++のライブラリであるBoostライブラリを利用したところ、windowsコンソールではうまく通信できたのですが、 Androidではbuildは出来たものの、apkをemulatorにインストールしてアプリを立ち上げるところで出来ませんでした(おそらライブラリをくandroid用にビルドしていないから) 色々調べたところccprestsdkを扱っている記事があったものの、visual studio 2019ではNugetからインストールが出来ずあきらめモードです、、、 もし簡単に通信を行えるライブラリがあれば教えていただけますでしょうか。 よろしくお願いいたします(泣)
メンテ

Page: 1 |

Re: Androidでサーバと連携したい ( No.1 )
名前:管理人 日時:2020/03/03 01:01

すみません、データベースには詳しくないので逆に質問してしまうのですが、 Android には java用の API として SQLite というものがあるようですが、 これは違うのですよね…?( 少し調べてみるとローカルでのデータベースのようで… ) <SQLite を使用してデータを保存する> https://developer.android.com/training/data-storage/sqlite?hl=ja <API リファレンス android.database.sqlite> https://developer.android.com/reference/android/database/sqlite/package-summary?hl=ja で、こちらや他の幾つかの情報を触れてみた限りではどうも Android端末から直接データベースに アクセスするのでは無く、WebAPIサーバーを介してデータベースにアクセスするのが一般的とのことです <AndroidアプリでSQL Server等のDBへ接続したい> https://diy-kagu.hatenablog.com/entry/2017/03/23/135936 WebAPI を使用するに当たって HTTP通信が必要と書かれているのですが、その部分は DXライブラリ Android版の機能の中に組み込めそうですが、WebAPI を実行するための サーバーの用意や WebAPI を作るところはできそうもありません Android端末 ←( HTTP通信 )→ WebAPIサーバー ←( SQL通信 )→ データベース たけのこさんが↑こちらの『WebAPIサーバー』より右側の部分を作成できる、とのことでしたら HTTP通信の部分は私の方で作成しようと思いますが、如何でしょうか?
メンテ
Re: Androidでサーバと連携したい ( No.2 )
名前:たけのこ 日時:2020/03/03 19:49

お返事ありがとうございます。 情報不足で申し訳ございません。 管理人さんの仰るとおりローカルでSQLiteのようなデータベースにアクセスはせず、XammpのMysqlを利用しています。 Android端末 ←( HTTP通信 )→ WebAPIサーバー ←( SQL通信 )→ データベース の流れで正しいです! PHPでapiは作成済みなので、Http通信でサーバーにデータの送受信、GET、POSTができれば問題は解決すると思います。。。 可能であれば通信部分をご教授いただければ幸いです。 よろしくお願いいたします。
メンテ
Re: Androidでサーバと連携したい ( No.3 )
名前:管理人 日時:2020/03/04 02:27

なるほど、HTTP の GET、POSTができれば問題解決なのですね こちらの@a_nishimuraさんの記事では Java の API を使用して HTTP通信を行っているようです <AndroidでのHTTP通信> https://qiita.com/a_nishimura/items/19cf3f60ad1dd3f66a84 こちらの記事で使用されている API は Java 用なので、これを C++ から使うような 関数を作ろうと思うのですが、以下のような関数で大丈夫でしょうか? // HTTP通信を行う // URL : 接続するパス // Method : "GET", "POST", "PUT" の何れか // 戻り値 : HTTP通信ハンドル int Android_HTTP_Connect( const char *URL, const char *Method ) ; // HTTP通信の結果得られたデータのバッファを取得する // HTTPConnectHandle : HTTP通信ハンドル // BufferSize : バッファに格納されているデータのサイズ // 戻り値 : データのバッファの先頭アドレス void *Android_HTTP_GetBuffer( int HTTPConnectHandle, size_t *BufferSize ) ; // HTTP通信ハンドルを閉じる // HTTPConnectHandle : HTTP通信ハンドル int Android_HTTP_Close( int HTTPHandle ) ;
メンテ
Re: Androidでサーバと連携したい ( No.4 )
名前:たけのこ 日時:2020/03/04 12:17

@a_nishinuraさんの記事を参考にしてandroid studioにおいてはjavaでhttp通信を行うことができました。 管理人さんが仰るように、Javaで扱われているAPIをc++で使えればとても助かります。 通信先apiにデータをgetで送信して、最終的には通信先からJSONでデータを受け取れれば問題ないです。 上記の関数の実装、よろしくお願い致します。m(_ _)m
メンテ
Re: Androidでサーバと連携したい ( No.5 )
名前:管理人 日時:2020/03/06 03:15

了解しました 早速関数を実装してみたのですが、通信API( Java の API)の一部がエラーの場合に例外を投げるように なっていて、C言語からその関数を呼んだ場合 Android ではクラッシュしまうようです… orz なので、改めて『通信API( Java の API )を呼ぶ Java の関数を作って、C言語からはその関数を呼ぶようにする』 という形のものを組んでみますので、もう暫くお待ちください m(_ _;m
メンテ
Re: Androidでサーバと連携したい ( No.6 )
名前:たけのこ 日時:2020/03/06 14:08

そうなんですね。なかなか難しそうです、、、 何卒よろしくお願い致します。
メンテ
Re: Androidでサーバと連携したい ( No.7 )
名前:管理人 日時:2020/03/07 15:32

お待たせしました、こちらに Java を使って HTTP通信を行う Java の関数を C言語側から 呼ぶということをするサンプルプログラムを載せましたので、よろしければご覧ください m(_ _)m <DXライブラリ Android版を使用した Androidアプリで Java のコードで HTTP通信を行う> https://dxlib.xsrv.jp/lecture/Android/Android_Java_HTTP.html サンプル内で定義している関数は以下の通りです ( No.3 のものとは若干異なっています ) // HTTP通信を行う // URL : 接続するパス // Method : "GET", "POST", "PUT" の何れか // 戻り値 : 0:成功 -1:エラー int Android_HTTP_Connect( const char *URL, const char *Method ) // HTTP通信の結果を取得する // 戻り値 : 通信の結果( 0:まだ通信中 1以上:HTTPレスポンスコード -2:IO例外発生 -3:MalformedURL例外発生 ) int Android_HTTP_GetResponseCode( void ) // HTTP通信の結果得られたデータのバッファを取得する // BufferBytes : バッファに格納されているデータのサイズを保存する変数のアドレス // 戻り値 : データのバッファの先頭アドレス void *Android_HTTP_GetBuffer( size_t *BufferBytes ) サンプルでは WinMain 関数と同じソースに上記関数も書いてありますので、もし複数のソースから 使用する場合は独立した cpp と h に関数を移動してください あと、受信用のバッファを 8MB の固定サイズとなっている若干雑な実装となっていますので、 もしサイズが足りない場合は固定サイズを増やすか、可変サイズにも対応できる形に変更してみてください m(_ _)m
メンテ
Re: Androidでサーバと連携したい ( No.8 )
名前:たけのこ 日時:2020/03/07 01:29

丁寧に記事まで書いていただき本当にありがとうございます! 無事Http通信することが出来ました。 大変助かりました。ありがとうございました。
メンテ
Re: Androidでサーバと連携したい ( No.9 )
名前:たけのこ 日時:2020/03/08 21:46

すみません。 http通信自体は出来たのですが,サーバのapcheのアクセスログで (POST /Kadai/sample.php HTTP/1.1" 200 128 "-" "Dalvik/2.1.0 (Linux; U; Android 6.0; Android SDK built for x86 Build/MASTER) と表示はされPHPにはたどり着いているのですが、どうやらクライアント側から値をPOST出来ていないようで、IOExceptionでエラーをキャッチしたのですが、 例外のエラー内容が出力できず原因がわからず困っています。 Android Studioで同じAPIレベルで同じEmulater(Galaxy Nexus API23)を使用して試したところ、問題なくパラメータをphpにPOSTできました。 プロジェクト内のAndroidManifest.xmlのsdkVersionの指定はこのようにしています <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="28"/> javaのソースファイルに以下のコードを追加しました。 ------------------------------------------------------------------------- public class HTTP_ConnectTask extends Thread { public void run() { try{ HttpURLConnection HTTPCon = null ; URL url = null ;// URLの作成 url = new URL( HTTP_URLString ) ; // 接続用HttpURLConnectionオブジェクト作成 HTTPCon = ( HttpURLConnection )url.openConnection() ; // メソッドタイプによって処理を分岐 switch( HTTP_MethodType ) { case 0: // GET HTTPCon.setRequestMethod( "GET" ) ; HTTPCon.setDoOutput( false ) ; break ; case 1: // POST HTTPCon.setRequestMethod( "POST" ) ; HTTPCon.setDoOutput( true ) ; break ; case 2: // PUT HTTPCon.setRequestMethod( "PUT" ) ; HTTPCon.setDoOutput( true ) ; break ; } HTTPCon.setDoInput( true ) ; // レスポンスコードの取得 HTTP_ResponseCode = HTTPCon.getResponseCode(); //phpに渡すパラメータ String parameter = "Date=2012&Beans=Brasil&Roaster=me&Note=bad&Rating=29"; //POST でパラメータをphpに渡す try{ OutputStream outStream = HTTPCon.getOutputStream(); outStream.write( parameter.getBytes(StandardCharsets.UTF_8)); outStream.flush(); HTTP_ResponseCode = 999 ; HTTPCon.connect() ; }catch (IOException e){ HTTP_ResponseCode = -5 ; } 以下略 ------------------------------------------------------------------------------- もし問題点が分かるようでしたら、教えていただけると幸いです。 よろしくお願い致します。
メンテ
Re: Androidでサーバと連携したい ( No.10 )
名前:たけのこ 日時:2020/03/08 22:07

phpの方のエラーが出力できたので、もしかしたら解決できそうです。
メンテ
Re: Androidでサーバと連携したい ( No.11 )
名前:管理人 日時:2020/03/09 05:07

なるほど、例外のエラーメッセージ… 例外が発生した場合、そのエラーメッセージを画面に表示するようにサンプルコードを書き換えてみましたので、 よろしければご覧ください m(_ _)m <DXライブラリ Android版を使用した Androidアプリで Java のコードで HTTP通信を行う> https://dxlib.xsrv.jp/lecture/Android/Android_Java_HTTP.html サンプルに以下の関数を追加しました // HTTP通信の例外メッセージを所得する // 戻り値 : 例外のメッセージ文字列のポインタ char *Android_HTTP_GetExceptionMessage( void ) ;
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存