2017-03-08 54 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有兩種類型,如上所述。

改裝版和rxjava的版本是這樣的:

//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' 

在我的Android應用程序,我用MVP來構建我的應用程序,我的片段只能有一個演示實例,所以在我的片段,我用只有一個Presenter實例發送兩種請求服務器API的類型,onNext回調只有一個。像下面的主要代碼:

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 JudiciaryHttpResult<T> { 
    public int code; 
    public String msg; 
    public T data; 
} 

的JudiciaryUser是象下面這樣:

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我認爲上面的代碼是不是最好的解決辦法。

相關問題