例えば、会員登録制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アプリからデータベースにデータを書き込むこともできます。
それはまた、別の機会に。
コメントを残す