JSON
オブジェクトをAsynctask
でWebサービスに渡そうとしています。私はMainActivity
のcollectStatistics
メソッドを呼び出します。この方法は、モバイルデバイスのいくつかの統計を収集し、JSON
オブジェクトでそれらを一緒に組み合わせます。 JSON
オブジェクトはAsynctask
に渡されます。AsyncTaskを通じてJSONオブジェクトをWebサービスに渡します
JSONObject jsonProperties = new JSONObject();
try {
jsonProperties.put("_device" , _device);
jsonProperties.put("_model", _model);
jsonProperties.put("_product", _product);
} catch (JSONException e) {
e.printStackTrace();
}
if (jsonProperties.length() > 0)
{
//call to async class
//String.valueOf(jsonProperties)
//new SendJsonProperties().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, jsonProperties); //instead of execute
Toast.makeText(context,jsonProperties.toString(),Toast.LENGTH_LONG).show();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
new SendJsonProperties().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, jsonProperties);
Log.i("msg","calling asynctask");
} else {
new SendJsonProperties().execute(jsonProperties);
Log.i("msg","NOT calling asynctask");
}
}
Asynctaskは、JSONパラメータ
class SendJsonProperties extends AsyncTask <JSONObject,String,String>
は私が
protected String doInBackground(JSONObject... params)
{
//(...) elippsis make the input array
Log.i("msg", "do in bkgnd");
WebServicesCaller webServicesCaller = new WebServicesCaller();
result = webServicesCaller.storeStatistics(params[0]);
return null;
}
doInBackgroundでのWebサービスの呼び出し元のメソッドを呼び出すしかし、私はこのエラー
を得る受け取りますjava.lang.RuntimeException: Cannot serialize: {"_product":"ms013gxx","_model":"SM-G7102","_device":"ms013g"}
シリアル化の問題を把握することはできません。どんな助けでも大歓迎です。前もって感謝します。
申し訳ありませんが、私はあなたが何について話しているのか分かりません、もっと説明できますか?ご協力いただきありがとうございます。 –
オブジェクト(_product)がシリアル化されていないため、このエラーが発生します。そのためには、上記のリンクを使用してシリアライズ可能に変換する必要があります。シリアライズされたオブジェクト –