2011-10-27 16 views
0

現在、Java Jsonライブラリで作業しています。私はHTTPリクエストを自分で行い、JacksonにJSONのシリアル化をさせる。Jackson MapperはAndroidでは例外をスローしますが、Java SEでは例外をスローしません

ほとんどの場合、ライブラリは正常に動作しますが、1つのケースでは正常に動作しません。

私はかなりデフォルトのPOJOを持っている:

 public class MyClass extends MyBase { 
      @JsonProperty("MY_PROP") 
      private string myProp; 

      // ... some properties more 

      @JsonProperty("DATA") 
      private SubClass data; 

      // ... getter/setter 
     } 

サブクラスは、主に整数フィールドと2重のフィールドを持つだけのクラスです。スーパークラスには、サーバーからのステータス情報が含まれています。この方法では、他の7つの応答クラスで動作します。

私はHTTPレスポンスが到着したとき、私は私のアンドロイド携帯電話上での例外を次取得火災小さなヘルパークラスを使用すると、サーバーの応答が

 { 
     "MY_PROP":12, 
     /* and so on*/ 
     "DATA":{ /* stuff */ } 
     } 

次のようになります。

org.codehaus.jackson.mapを.JsonMappingException:型[simple type、class my.company.at.MyClassBase]に対して適切なコンストラクタが見つかりませんでした:JSONオブジェクトからインスタンス化できません(型情報の追加/有効化が必要ですか?)

私がコンピュータ上でJunit-Testを実行する場合、まったく同じことが行われますが、逆シリアル化されたオブジェクトが取得されます。何か案は?

答えて

0

私は根本的な原因はわかりませんが、クラスにデフォルトの(引数なしの)コンストラクタがない場合は、おそらく追加しようとしますか?コンストラクタが存在しない場合、Javacは1つを追加する必要がありますが、Androidのコンパイラがこの場合異なる種類のクラスを生成するかどうかは疑問です。

+0

役に立たなかったこのコンストラクタを追加した後、MY_PROPという認識されていないプロパティについては奇妙な例外が投げられました。 – schlingel

+1

このエラーは、(名前が示すように)バインドしようとしているクラスがプロパティ "MY_PROP"を定義していないことを示唆しています。簡単な質問:MyClass.class(それを持つ)またはMyBase.class(おそらくそうではない)にバインドしようとしていますか?後者の場合は例外が当てはまります。 – StaxMan

+0

いいえ、私はMyClassに対してそれをバインドします。私はジャクソンの代わりにGSONを使用するように、現在のアプリケーションを再加工し始めました。現時点でGSONはジャクソンよりも100%速いので、奇妙なDalvik/SUN JVMの違いを調べる代わりに、私はGSONの微調整に力を入れています。とにかくポインタのおかげで。 – schlingel

関連する問題