2017-03-08 16 views
-1

最初のJSON文字列は、このようなものです:とjava.lang.ClassCastException:com.google.gson.internal.LinkedTreeMapは私のJava Beanクラスにキャストすることはできません

{ 
"code": "2000", 
"msg": "success", 
"data": { 
    "khmc": "some company", 
    "contact": "jack", 
    "phone": "18888888888", 
    "address": "Shanghai" 
    } 
} 

このような二JSON文字列:

{ 
    "code": "2000", 
    "msg": "success", 
    "data": "add success" 
} 

返されたjsonには、上記の2つのタイプがあります。

改造バージョンとrxjavaバージョンは、このようなものです:私のAndroidアプリで

//ReactiveX 
compile 'io.reactivex:rxjava:1.2.3' 
compile 'io.reactivex:rxandroid:1.2.1' 

//Retrofit 
compile 'com.squareup.retrofit2:retrofit:2.1.0' 
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' 
compile 'com.squareup.retrofit2:converter-gson:2.1.0' 

、私は私のフラグメントが一つだけプレゼンターインスタンスを持つことができ、私のアプリを構築するためにMVPを使用するので、私のフラグメントに、私が使用しましたサーバーAPIの2つのタイプの要求を送信する唯一のPresenterインスタンスは、onNextコールバックには1つしかありません。以下のようなメインコード:

public class JudiciaryHttpResult<T> { 
    public int code; 
    public String msg; 
    public T data; 
} 

JudiciaryUserは以下のようなものです::

public class AddFormFragment extends MvpFragment<AddFormPresenter> implements IAddFormView { 
    @Override 
    public void onNext(JudiciaryHttpResult judiciaryHttpResult) { 
     switch (judiciaryHttpResult.code) { 
      case Constants.JudiciaryResponseCode.JUDICIARY_SUCCESS_CODE: 
       if (judiciaryHttpResult.data != null) { 
        Object object = judiciaryHttpResult.data; 
        if (object instanceof String) { 
        ToastUtil.showShort(object.toString()); 
       } else { 
        JudiciaryUser user = (JudiciaryUser) object; 
        mKhmcEt.setText(user.getKhmc()); 
        mContactEt.setText(user.getContact()); 
        mPhoneEt.setText(user.getPhone()); 
        mAddressEt.setText(user.getAddress()); 
       } 
      } 
      break; 
     } 
     } 
    } 
    } 

JudiciaryHttpResultは、以下のようなものです

public class JudiciaryUser { 

    public String khmc; 

    public String contact; 

    public String phone; 

    public String address; 
} 

私は私のフラグメントでonNextコールバックを取得するとき、 elseブロックの最初の行コードは次のようになります。

JudiciaryUser user = (JudiciaryUser) judiciaryHttpResult.data; 

私は質問のタイトルのような例外を得るでしょう、誰かが私を助けることができますか?

答えて

0

私はjudiciaryHttpResult.dataがLinkedTreeMapインスタンスだと思うので、私はこのようにそれを行うことができます。上記のような

//JudiciaryUser user = (JudiciaryUser) judiciaryHttpResult.data; 
    //mKhmcEt.setText(user.khmc); 
    //mContactEt.setText(user.contact); 
    //mPhoneEt.setText(user.phone); 
    //mAddressEt.setText(user.address); 


    //region Solve java.lang.ClassCastException: 
    // com.google.gson.internal.LinkedTreeMap cannot be cast to 
    // cn.shllwl.judiciaryauther.entity.bean.JudiciaryUser 

    LinkedTreeMap linkedTreeMap = (LinkedTreeMap) judiciaryHttpResult.data; 

        mKhmcEt.setText(linkedTreeMap.get("khmc").toString()); 
        mContactEt.setText(linkedTreeMap.get("contact").toString()); 
        mPhoneEt.setText(linkedTreeMap.get("phone").toString()); 
        mAddressEt.setText(linkedTreeMap.get("address").toString()); 
    //endregion 

、私は上記のコードは、最善の解決策はないと思うfine.Butコードの仕事。

関連する問題