選択 モバイル版に入る | PC版を継続
Android開発に助かるApkSchool版主募集中DISCUZ!X3.1 Japanese Version提供
表示: 9772|返信: 0

Androidとサーバ間Asynctaskによる非同期Http通信(JSON,PHP)

[リンクをコピー]
发表于 2013-8-5 10:54:41 | 显示全部楼层 |阅读模式
webhostingpad
この記事は最後 niuxs より 2013-8-6 19:03 編集された

◆PHPでJSONデータを作成する
サーバ側のPHPで、データレコードをDBから取得して、JSONデータに変換して、端末にresponseすることを示します。
異なる種類のデータレコード集をJSONデータに入れることもできます。
この例では、ExpandListView用のデータを一回で取得するので、
GroupListとChindrenListを同時にJSONデータに入れます。
この例を参照したら、データレコード集を一種類のみの取得は簡単です。

http://www.apkschool.net/Mobile_Server/form/home/getExpandListData.php
を実行したら、この例のJSONデータのイメージが見れます。

PHPのソースを参照しましょう
  1. <?php
  2.     header("Content-Type: text/html; charset=UTF-8");

  3. //データベースに接続する
  4.     $sqlserver = "localhost";    //PHPサーバとDBサーバが同一の場合は、localhostを指定。以外の場合は、DBのIPを設定する
  5.     $sqluser = "????";             //自分のDBに応じて設定するね
  6.     $sqlpassword = "????";    //自分のDBに応じて設定するね
  7.     $database = "????";          //自分のDBに応じて設定するね
  8.    
  9.     $connect_id = mysql_connect($sqlserver, $sqluser, $sqlpassword);
  10.     if ($connect_id) {
  11.         mysql_select_db($database);
  12.     }
  13.     //GroupList検索SQL文
  14.     $strSql = "SELECT A.GroupID, A.GroupName ";
  15.     $strSql = $strSql . " FROM GroupList A ";
  16.     $strSql = $strSql . " ORDER BY A.GroupID ";
  17.     //SQL文を実行する
  18.     mysql_query("SET NAMES 'utf8'");
  19.     $query_result = mysql_query($sql, $connect_id);
  20.     //GroupListを作成
  21.     $GroupList = array();
  22.     while($row =   mysql_fetch_assoc($query_result); ) {
  23.         GroupList[] = $row;
  24.     };
  25.    //ChildrenList検索SQL文
  26.     $strSql = "SELECT A.GroupID, A.ChildID, A.ChildName, A.ImgPath, A.Tensu, A.Kaisu ";
  27.     $strSql = $strSql . " FROM ChildrenList A ";
  28.     $strSql = $strSql . " ORDER BY A.GroupID, A.ChildID ";
  29.     //SQL文を実行する
  30.     mysql_query("SET NAMES 'utf8'");
  31.     $query_result = mysql_query($sql, $connect_id);
  32.     //ChildListを作成
  33.     $ChildList = array();
  34.     while($row =   $DB->fetch_row2()) {
  35.         ChildList[] = $row;
  36.     };
  37.     //ChildrenListのarrayを作成
  38.     ResponseArray= array(
  39.         'GroupList'=>  $GroupList,
  40.         'ChildrenList'=>  $ChildList
  41.     );
  42.     //接続を閉じる
  43.     if ($query_result) {
  44.         mysql_free_result($query_result);
  45.     }
  46.     if ($this->connect_id) {
  47.         mysql_close($connect_id);
  48.     }
  49.     //jsonとして出力
  50.     //header('Content-type: application/json');
  51.     echo urldecode(json_encode($ResponseArray));
  52. ?>
コードコピー
◆Android側でJSONデータを非同期で受信して分析する
では、Android側の処理を示します。

ActivityのCreate()メソッドの中に、
mExpandableListView.setAdapter(mAdapter);の後で、下記の非同期処理を行うことで、Groupsとchildrenを取得する。
  // Groupsとchildren取得スレッド起動
  ListGetAsyncTask task = new  ListGetAsyncTask();
  task.execute();

ListGetAsyncTaskクラスのソースを見ましょう。
  1. mExpandableListView.setAdapter(mAdapter);
  2. // Groupsとchildren取得スレッド起動
  3. ListGetAsyncTask task = new        ListGetAsyncTask();
  4. task.execute();
コードコピー
  1. // Groupsとchildren取得スレッド起動
  2.         class ListGetAsyncTask extends AsyncTask<String, Void, Bitmap> {
  3.                 public ListGetAsyncTask() {
  4.                 }

  5.                 @Override
  6.                 protected Bitmap doInBackground(String... params) {
  7.                         // GroupList情報、ChildrenList情報を、サーバから取得する
  8.                         String result = query();
  9.                         try {
  10.                                 JSONObject jo = new JSONObject(result);
  11.                                 // GroupList情報
  12.                                 JSONArray jsonArrayGroup = jo.getJSONArray("GroupList");
  13.                                 // ChildrenList情報
  14.                                 JSONArray jsonArrayChildren = jo.getJSONArray("ChildrenList");

  15.                                 Integer GroupListCount = jsonArrayGroup.length();
  16.                                 groups = new String[GroupListCount];
  17.                                 int j = 0;
  18.                                 for (int i = 0; i < GroupListCount; i++) {
  19.                                         // group情報を取得、格納
  20.                                         JSONObject og = (JSONObject) jsonArrayGroup.get(i);
  21.                                         groups[i] = og.getString("GroupName");
  22.                                         String GroupID = og.getString("GroupID");
  23.                                         // Children情報を取得、格納
  24.                                         List<ChildrenData> list = new ArrayList<ChildrenData>();
  25.                                         while (j < jsonArrayChildren.length()) {
  26.                                                 JSONObject oc = (JSONObject) jsonArrayChildren.get(j);
  27.                                                 String GroupID2 = oc.getString("GroupID");
  28.                                                 // 同一のグループの場合
  29.                                                 if (GroupID2.equals(GroupID)) {
  30.                                                         ChildrenData childrenData = new ChildrenData();
  31.                                                         childrenData.ChildID = oc.getString("ChildID");
  32.                                                         childrenData.ChildName = oc.getString("ChildName");
  33.                                                         childrenData.ImgPath = oc.getString("ImgPath");
  34.                                                         childrenData.Tensu = oc.getString("Tensu");
  35.                                                         childrenData.Kaisu = oc.getString("Kaisu");
  36.                                                         list.add(childrenData);
  37.                                                         j = j + 1;
  38.                                                 } else {
  39.                                                         children.add(list);
  40.                                                         break;
  41.                                                 }
  42.                                                 if (j == jsonArrayChildren.length()) {
  43.                                                         children.add(list);
  44.                                                         break;
  45.                                                 }
  46.                                         }
  47.                                 }
  48.                         } catch (JSONException e) {
  49.                                 e.printStackTrace();
  50.                         }
  51.                         return null;
  52.                 }
  53.                
  54.                 protected String query() {
  55.                         String app_url = "form/home/getExpandListData.php";
  56.                        ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
  57.                         //NameValuePair pair1 = new BasicNameValuePair("p1", "FatherList get");
  58.                         //params.add(pair1);
  59.                         String result = HttpUtil.doPost(app_url, params);
  60.                         return result;
  61.                 }

  62.                 @Override
  63.                 protected void onPostExecute(Bitmap result) {
  64.                         mAdapter.notifyDataSetChanged();
  65.                 }
  66.         }

  67.         class ChildrenData {
  68.                 String GroupID;
  69.                 String ChildID;
  70.                 String ChildName;
  71.                 String ImgPath;
  72.                 String Tensu;
  73.                 String Kaisu;
  74.         }
コードコピー
HttpUtilクラスはJSONデータの請求&受信を行います。下記添付ファイルを
ダウンロードしてください。

以上です。役に立ってください。

この記事に更なる添付があります

貴方は ログイン 後、ダウンロード・閲覧が可能となる,アカウントない?直ぐ登録

x
返信

道具使用 レポート

返信は先にログインが必要 ログイン | 直ぐ登録

フォーラム点数規則

フリーランス

モバイル版|APK School Net  

GMT+8, 2017-12-12 06:39 , Processed in 0.114232 second(s), 25 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速返信 トップへ リストへ