FC2ブログ
    04 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 06

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】NCMBの簡単な使い方。データの保存の仕方。公式のマニュアルみれば大体わかるとおもうけどね! 後編! 

    こんにちは。坂内っす。

    最近WoWのやりすぎで首と肩が痛いっす。

    さて、先週NCMBへのデータの保存方法を書きましたので、今回はNCMBへデータ保存したやつを持ってくる方法を簡単に紹介。

    【ハルシオンブログ】NCMBの簡単な使い方。データの保存の仕方。公式のマニュアルみれば大体わかるとおもうけどね!

    とりあえず今回はNCMBが勝手に一意のIDをデータ毎に振り分けてるものがあるので、それを使いたいと思います。

    前回登録したときの事覚えてますか?



    登録成功したときに ObjectIDというのを取ってきてますよね。
    ってことで、こいつをPlayerprefにでも突っ込んでおけば、次回読み込み時にそのIDを使ってデータを持ってこれます。

    では、前回のTestNCMBManagerをいじってみましょう。

    [TestNCMBManager.cs](赤文字が追加行)
    using UnityEngine;
    using UnityEngine.UI;
    using System.Linq;
    using NCMB;

    public class TestNCMBManager : MonoBehaviour {

    public InputField inpNameObj;
    public Dropdown drpAgeObj;
    public ToggleGroup tglSexCodeGroupObj;
    public InputField inpCommentObj;

    public void OnClickSubmit() {
    string name = inpNameObj.text;
    string age = drpAgeObj.options[drpAgeObj.value].text;
    string sex = tglSexCodeGroupObj.ActiveToggles().First().GetComponentsInChildren<Text>()
    .First(t => t.name == "Label").text;
    string comment = inpCommentObj.text;

    Debug.Log("名前:" + name + "\r\n年齢:" + age + "\r\n性別:"
    + sex + "\r\nコメント:" + comment);
    Write_NCMB(name,age,sex,comment);
    }

    private void Write_NCMB(string name,string age,string sex,string comment) {
    // TestDataObjectを生成
    NCMBObject testClass = new NCMBObject("TestDataObject");

    // オブジェクトに値を設定
    testClass["name"] = name;
    testClass["age"] = age;
    testClass["sex"] = sex;
    testClass["comment"] = comment;

    // データストアへの登録
    testClass.SaveAsync((NCMBException e) => {
    if(e != null) {
    Debug.Log("保存に失敗しました。\n ErrorCode : " + (string)e.ErrorMessage + "\n");
    } else {
    Debug.Log("保存に成功しました。\n objectId : " + (string)testClass.ObjectId + "\n");
    PlayerPrefs.SetString("ncmbtest", (string)testClass.ObjectId);
    }
    }
    );
    }
    }


    今回追加したのは赤文字のところです。
    データ保存が成功したときにPlayerprefにtestClassのObjectIDを保存しています。


    画面の方もいじっていきましょう。



    登録ボタンの下に読み込みボタンを配置してみました。
    動作としては、読み込みボタンを押したときに、一度データが保存されている場合のみ、データを読み込み、Debugで表示してみましょう。

    [TestNCMBManager.cs](赤文字が追加行)
    using UnityEngine;
    using UnityEngine.UI;
    using System.Linq;
    using System.Collections.Generic;
    using NCMB;

    public class TestNCMBManager : MonoBehaviour {

    public InputField inpNameObj;
    public Dropdown drpAgeObj;
    public ToggleGroup tglSexCodeGroupObj;
    public InputField inpCommentObj;

    public void OnClickSubmit() {
    string name = inpNameObj.text;
    string age = drpAgeObj.options[drpAgeObj.value].text;
    string sex = tglSexCodeGroupObj.ActiveToggles().First().GetComponentsInChildren<Text>()
    .First(t => t.name == "Label").text;
    string comment = inpCommentObj.text;

    Debug.Log("名前:" + name + "\r\n年齢:" + age + "\r\n性別:"
          + sex + "\r\nコメント:" + comment);
    Write_NCMB(name,age,sex,comment);
    }


    public void OnClickLoad() {
    string myObjectKeyId = PlayerPrefs.GetString("ncmbtest", "");
    if(myObjectKeyId != "") {
    // TestDataObjectクラスを検索するクエリ作成
    NCMBObject findObj = new NCMBObject("TestDataObject");
    findObj.ObjectId = myObjectKeyId;

    // データを検索
    findObj.FetchAsync((NCMBException e) => {
    if(e != null) {
    // 検索失敗
    Debug.Log("検索に失敗しました。" + e.ErrorCode);
    } else {
    string strData = "";
    strData += "名前:" + System.Convert.ToString(findObj["name"]) + "\r\n";
    strData += "年齢:" + System.Convert.ToString(findObj["age"]) + "\r\n";
    strData += "性別:" + System.Convert.ToString(findObj["sex"]) + "\r\n";
    strData += "コメント:" + System.Convert.ToString(findObj["comment"]) + "\r\n";
    Debug.Log(strData);
    }
    });
    } else {
    // 空の場合
    Debug.Log("データが保存されていません。いったんデータを保存してね!");
    }
    }

    private void Write_NCMB(string name,string age,string sex,string comment) {
    // TestDataObjectを生成
    NCMBObject testClass = new NCMBObject("TestDataObject");

    // オブジェクトに値を設定
    testClass["name"] = name;
    testClass["age"] = age;
    testClass["sex"] = sex;
    testClass["comment"] = comment;

    // データストアへの登録
    testClass.SaveAsync((NCMBException e) => {
    if(e != null) {
    Debug.Log("保存に失敗しました。\n ErrorCode : " + (string)e.ErrorMessage + "\n");
    } else {
    Debug.Log("保存に成功しました。\n objectId : " + (string)testClass.ObjectId + "\n");
    PlayerPrefs.SetString("ncmbtest", (string)testClass.ObjectId);
    }
    }
    );
    }
    }


    では、実行してみます。



    まだ上記コードを入れた後に登録していないので、こうなりますね。

    それでは一旦データを登録してから読み込んでみます。




    取れました!

    ●NCMBObject findObj = new NCMBObject("TestDataObject");
    で、TestDataObjectのテーブルを指定。

    ●findObj.ObjectId = myObjectKeyId;
    で、ObjectIDを指定。

    ●findObj.FetchAsync((NCMBException e) => {}
    で、NCMBにあるTestDataObjectのテーブルに接続し、上記指定ObjectIDのレコードにフェッチしてる感じですかね。

    ●findObj["name"] や findObj["age"]
    で、そのレコードのデータを実際にとってきてますね。

    今回はObjectIDを使用したフェッチでしたが、SQLのWhereみたいに色んな条件でデータを取ることも可能です。

    たとえばこんなデータがあったとき


    ageが「19」のデータを取りたいといった場合に、以下のような感じで取れます。

    //TestDataObjectを検索するクラスを作成
    NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject>("TestDataObject");
    //ageの値が"19歳"と一致するオブジェクト検索
    query.WhereEqualTo("age","19歳");
    query.FindAsync((List<NCMBObject> objList, NCMBException e) => {
    if(e != null) {
    //検索失敗時の処理
    } else {
    //ageが"19歳"の名前を出力
    foreach(NCMBObject obj in objList) {
    Debug.Log("名前:" + System.Convert.ToString(obj["name"]));
    }
    }
    });





    という感じでデータはとれるようです!

    ってことで、NCMBのお話後編はこれにて終了!

    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/496-b058ee26
    この記事にトラックバックする(FC2ブログユーザー)