AndroidアプリからasmxWebサービスのWebメソッドを呼び出していますが、そのメソッドはjsonオブジェクトを受け入れます。アプリをデバッグすると、次の例外「1001.10をシリアル化できません」(クラス変数の値の1つ)が表示されます。以下では、値をハードコーディングしてデータを送信しています(テスト目的で)
Item itm=new Item();
ItemType itype=new ItemType();
itm.Description="Good Product";
itm.BarcodeNumber="1234";
itm.Depreciation=(float) 100.56;
itm.AgencyId=1;
itm.ItemCode="Android";
itm.ItemValue=(float) 9999.99;
itm.PurDate=new Date(0); //Date I am sending here...
itm.PurValue=(float) 1001.10;
itype.Itemname="Android App";
itype.Make="Android Developers";
itype.Model="2013 Model";
itype.Year=new Date(0);
itm.iType=itype;
itm.PurValueの後に「Cannontserialize1001.01」として例外が発生します(アプリのデバッグ時に例外が発生しました)
日付形式が原因だと思いましたが、Webサービスがjsonオブジェクトを受け入れるため、送信しているオブジェクトの形式がエラーである可能性があると思いました。
Javaオブジェクトをjsonオブジェクトに変換するために、gson.jarファイルをJavaビルドパス---librariesに追加しました。
Gsonを使用してJavaオブジェクトをjson文字列に変換し、そのjson文字列をWebサービスに渡します。
アプリを実行すると、アプリが中止され、「残念ながら、アプリが機能しなくなりました」と表示されます。
これが、Javaオブジェクトをjson文字列に変換するために使用するコードです。
Gson gson = new Gson(); //Exception Occurred at this point when control comes here it is giving as Invocation Target Exception
String json=gson.toJson(itm);
p.setName("ThisItem");
p.setValue(json);
p.setType(String.class);
request.addProperty(p);
残りのコードは一般的です...しかし、参考のために、私はそのコードもここに貼り付けています。
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidTSE=new HttpTransportSE(URL);
try
{
androidTSE.call(Soap_Action, envelope);
SoapObject response=(SoapObject) envelope.getResponse();
return response.toString();
}
catch(Exception ex)
{
return ex.toString();
}
上記のgsonコードを含めてアプリをデバッグすると、呼び出しターゲット例外として例外が発生します。
何が問題なのか?オブジェクトで使用している日付形式ですか、それともJavaオブジェクトをgsonオブジェクトに変換する形式ですか?
最後に、jsonオブジェクトをasmxWebサービスに送信したいと言いたいです。どうすればこの問題を解決できますか。誰でもアイデアを共有してください。私はこのエラーのために7時間苦労しています。
事前に感謝しますガネーシャ