【Androidアプリ開発】PHPと連携し、データベースからデータをアプリに持ってくる方法

例えば、会員登録制Webサイトのアプリを作る場合で、
その会員のデータをデータベースから持ってきたい、
というような場合ですね。

あらかじめ必要な準備

①非同期クラスを作成
「非同期クラスって何?」という人は以下を参照。
https://calculus-app.com/blog/develop_android/android_asynctask/206

②非同期クラスの中でネットワークに接続
「どうやってネットワークに接続するの?」という人は以下を参照。
https://calculus-app.com/blog/develop_android/android_network/229

これで、Androidアプリの中でネット(特定のURL)に接続することはできたわけです。

 

PHPからAndroidアプリにデータを渡す

Androidアプリから特定のURLに接続することはできましたが、
その、特定のURLで何も行われなければ、Androidアプリも何の情報も得ることはできません。

そこで、Androidアプリから接続したURLに、
PHPファイルを作り、そこで
①データベースに接続し、
②データを取得して、
③吐き出し、
④そのデータをAndroidで取得する

わけです。

データベースへの接続方法や、
データベースから情報を取ってくる方法は、
PHPの領域なので、ここでは説明しません。
各自ググってみてください。

③取得したデータは、JSONという形式で吐き出します。
JSONとは、PHPやJAVA、Javascriptなど、
複数の言語形式の間でデータをやり取りできる、共通言語のようなものだと思ってください。

PHPのコードとしては、以下のようになります。

/* データベースに接続して、データを持ってきた */
$result_select_data = mysql_query($sql_select_data);

/* データ格納用の配列を作成 */
$row_array = array();
$i = 0;
while ($row = mysql_fetch_assoc($result_select_data)) {
	$row_array[$i] = $row;
	$i++;
}

/* データの格納された配列を、JSON形式にして吐き出す */
header('Content-Type: application/json; charset=utf-8');
echo json_encode($row_array, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); //JSON形式にして返す

通常のPHPでは、$row_arrayをそのまま利用するかと思いますが、
ここでは、PHPからAndroidアプリにデータを渡せるようにするため、
JSON形式にデコード(変換)しています。

これで、
AndroidがURLにアクセス→PHPがデータベースからデータを取得して吐き出す
という流れはできました。

 

受け取ったデータをAndroidアプリで解析する

PHPから送られてきたデータ形式はJSONですから、
Androidアプリで受け取ったあとでも、そのままではString(文字列)として利用することはできません。

例えば、上記のPHPコードでは、
以下のような形でデータが返ってきます。

[
	{
		"id": "248",
		"title": "リンゴ",
		"status": "ACTIVE"
	},
	{
		"id": "249",
		"title": "みかん",
		"status": "ACTIVE"
	},
	{
		"id": "250",
		"title": "バナナ",
		"status": "WAIT"
	}
]

大外の [ ] は配列、
その中の { } はオブジェクトです。

ですので、このJSONを受け取ってStringに直すコードは、
以下のようになります。

@Override
protected JSONArray doInBackground (String... params) {

	Request request = new Request.Builder()
			.url("接続先URL")
			.get()
			.build();

	OkHttpClient client = new OkHttpClient();

	try {
		Response response = client.newCall(request).execute();

		String jsonData = response.body().string();
		try {
			JSONArray Jarray = new JSONArray(jsonData);
			String tempStr;
			for (int i = 0; i < Jarray.length(); i++) {
				tempStr = Jobject.getJSONObject(i).getString("title");
			}
			return Jarray;
		} catch (JSONException e) {
			Log.e("MYAPP", "unexpected JSON exception", e);
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
	return Jarray;
}

try-catch文の中を見てください。

PHPから受け取ったレスポンスを一旦全てStringにし、
大外が配列 [ ] で囲われていたため、それをJSONArrayに直します。

その後、for文の中で、JSONArrayの中のオブジェクトを取得 .getJSONObject(i)
取得したオブジェクトの中の、”title”というキーを持つ値を、Stringに直しています。 .getString(“title”)

上記のPHPの例だと、
tempStrには、リンゴ・みかん・バナナの順番でStringが格納されていきますね。

 

まとめ

これで、Androidアプリから、
ネットワーク上のデータベース上のデータを取得することができました。

これがわかれば、ネットとアプリの連携という、
一番必要度が高そうなところを使いこなすことができますね。

もちろん、Androidアプリからデータベースにデータを書き込むこともできます。
それはまた、別の機会に。

 

コメントを残す

メールアドレスが公開されることはありません。