「APIについて」のWwwExのところで「NullReferenceException: Object reference not set to an instance of an object」というエラーが出てしまう | Unity Forum | Tech Stadium Forum

「APIについて」のWwwExのところ...
 
通知
すべてクリア

「APIについて」のWwwExのところで「NullReferenceException: Object reference not set to an instance of an object」というエラーが出てしまう  

  RSS

Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
04/09/2020 12:40 pm  

「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のデータが入るべきなのでは?と思っていますが認識あっているでしょうか?


引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
04/09/2020 12:41 pm  

原因として、ManagerMain.csファイルのDownloadJsonメソッドの中身を書き間違えている可能性があります。

sStrJsonにはcbkSuccess(www.downloadHandler.text); の引数であるwww.downloadHandler.text) の値が代入されるはずです。
そこに“succes"の値が入っていることはおかしいので、もしかしたらその部分を間違っているかもしれません。

もしくは、取得しているjsonデータに問題があるかもしれません。
一度、取得しているはずのphpファイルを確認してみると良いかもです。

憶測で話しているので、問題は別の場所かもしれないです(汗)。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
04/09/2020 12:41 pm  

回答ありがとうございます!
すみません、、説明が足りていなかったのですが、今回はSetMessageボタンの実装のところでエラーが出ていました。

ただ、頂いたアドバイスでどういう値が入ってくるべきか整理ができ、自己解決まで行けました!

原因は、SetJsonFromWWW()内の、StartCorutioneに渡す引数で、WebRewuestSuccessを指定していたのが原因でした。(動画内ではそう書いてあったので、、、)
動画のAPIについて⑥の最後の方で、本来引数として渡すべきWebRequestSuccess()の紹介をしていたと思うのですが、それの意味が分からず、書いたものの使っていない状況でした。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
04/09/2020 12:42 pm  

もう一点質問です。
ManagerMainクラスに、接続が成功した際に呼ばれるCallbackWebRequestSuccess() 関数があると思うのですが、引数はどのタイミングで渡しているのでしょうか?

おそらく、コルーチン内でのみCallbackWebRequestSuccess()を使っているかと思うのですが、引数を渡しているような場所が見当たらず。。。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
04/09/2020 12:42 pm  

こちら自己解決できました!

例えばSetMessageボタンの処理なら、SerMessage()内で引数を指定しているのですね!
コルーチンの理解が不十分だったのでもっと勉強します。。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
04/01/2021 5:23 pm  

私も同じエラーが発生しました。

確認ですが、CallbackWebRequestSuccessではなく、WebRequestSuccessを使うのが合っていますか?


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
04/01/2021 5:24 pm  

動画内で、SerMessage()の第4引数でとして使われている「CallbackWebRequestSuccess」は関数です。

Action型を使って関数を引数として渡しています。

ここでは、"JSONデータの取得リクエストが成功した際に呼ばれる関数"を指定したいので、その処理が行われている 関数名 を指定してください。

因みに動画では、JSONデータの取得リクエストが成功した際に、受け取ったJSONデータのデコードとテキスト表示を変更を行うので、その処理が行われる関数「CallbackWebRequestSuccess」の指定で合っています。


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1325
04/01/2021 5:24 pm  

ありがとうございます。
理解が追いついておらず、助かります。
ところで、WebRequestSuccess関数はどこで使われているのでしょうか?
※APIについて⑥の動画26分ごろに記述の関数です。


返信引用
Teacher
(@admin)
メンバー Admin
結合: 4年前
投稿: 1296
04/01/2021 5:25 pm  

関数「WebRequestSuccess」は、ディスプレイのテキストに引数となるJSONデータを入れているので、取得したJSONデータをディスプレイに表示して確認する為の関数と思われます。

先ほどのSerMessage()の第4引数でとして使われている「CallbackWebRequestSuccess」を「WebRequestSuccess」に書き換えれば確認する事が出来るかと思います。

これと同じ様に、JSONデータをディスプレイに表示して確認する関数が使われているサンプルが、「techsta_unity_unityapi」リポジトリにあります。

リポジトリ内のUnityProjectフォルダにある「ApiTest01_Message」というプロジェクトですので、ぜひ参考にしてみて下さい。


返信引用
共有:
タイトルとURLをコピーしました