「APIについて」のWwwExのところで質問です。
動画通りに一通りスクリプトを書き、setMessageへPOSTするところまできたのですが、
MemberDataModelクラスの、foreach (IDictionary jsonOne in jsonList)
のところで、「NullReferenceException: Object reference not set to an instance of an object」というエラーが出てしまいます。
原因分からないのですが、何か思い当たる点あるでしょうか?
ちなみに、デバックでスクリプトの流れを追っていた際に、DeserializeFromJson()
に渡される引数が、stringの"Success"と書いてあったのですが、ここはJsonのデータが入るべきなのでは?と思っていますが認識あっているでしょうか?
原因として、ManagerMain.cs
ファイルのDownloadJson
メソッドの中身を書き間違えている可能性があります。
sStrJsonにはcbkSuccess(
www.downloadHandler.text
);
の引数であるwww.downloadHandler.text
)
の値が代入されるはずです。
そこに“succes"
の値が入っていることはおかしいので、もしかしたらその部分を間違っているかもしれません。
もしくは、取得しているjsonデータに問題があるかもしれません。
一度、取得しているはずのphpファイルを確認してみると良いかもです。
憶測で話しているので、問題は別の場所かもしれないです(汗)。
回答ありがとうございます!
すみません、、説明が足りていなかったのですが、今回はSetMessageボタンの実装のところでエラーが出ていました。
ただ、頂いたアドバイスでどういう値が入ってくるべきか整理ができ、自己解決まで行けました!
原因は、SetJsonFromWWW()
内の、StartCorutione
に渡す引数で、WebRewuestSuccess
を指定していたのが原因でした。(動画内ではそう書いてあったので、、、)
動画のAPIについて⑥の最後の方で、本来引数として渡すべきWebRequestSuccess()
の紹介をしていたと思うのですが、それの意味が分からず、書いたものの使っていない状況でした。
もう一点質問です。
ManagerMainクラスに、接続が成功した際に呼ばれるCallbackWebRequestSuccess()
関数があると思うのですが、引数はどのタイミングで渡しているのでしょうか?
おそらく、コルーチン内でのみCallbackWebRequestSuccess()
を使っているかと思うのですが、引数を渡しているような場所が見当たらず。。。
こちら自己解決できました!
例えばSetMessageボタンの処理なら、SerMessage()
内で引数を指定しているのですね!
コルーチンの理解が不十分だったのでもっと勉強します。。
動画内で、SerMessage()の第4引数でとして使われている「CallbackWebRequestSuccess」は関数です。
Action型を使って関数を引数として渡しています。
ここでは、"JSONデータの取得リクエストが成功した際に呼ばれる関数"を指定したいので、その処理が行われている 関数名 を指定してください。
因みに動画では、JSONデータの取得リクエストが成功した際に、受け取ったJSONデータのデコードとテキスト表示を変更を行うので、その処理が行われる関数「CallbackWebRequestSuccess」の指定で合っています。
ありがとうございます。
理解が追いついておらず、助かります。
ところで、WebRequestSuccess関数はどこで使われているのでしょうか?
※APIについて⑥の動画26分ごろに記述の関数です。
関数「WebRequestSuccess」は、ディスプレイのテキストに引数となるJSONデータを入れているので、取得したJSONデータをディスプレイに表示して確認する為の関数と思われます。
先ほどのSerMessage()の第4引数でとして使われている「CallbackWebRequestSuccess」を「WebRequestSuccess」に書き換えれば確認する事が出来るかと思います。
これと同じ様に、JSONデータをディスプレイに表示して確認する関数が使われているサンプルが、「techsta_unity_unityapi」リポジトリにあります。
リポジトリ内のUnityProjectフォルダにある「ApiTest01_Message」というプロジェクトですので、ぜひ参考にしてみて下さい。