FC2ブログ
10 «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.» 12

ハルシオンシステムの気まま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.blog.fc2.com/tb.php/496-b058ee26
この記事にトラックバックする(FC2ブログユーザー)