android - android 中的 com.thoughtworks.xstream.mapper.CannotResolveClassException

标签 android xml xstream

我正在将 xml 解析为 java 模型。在将 xml 解析为 java 对象时,我得到了 com.thoughtworks.xstream.mapper.CannotResolveClassException 异常。这是我的代码。 我正在从 http 响应中获取 xml。我想把它转换成 java 模型

public class GetCarAsynTask extends AsyncTask<Void,Void,HttpResponse> {

    private Context mContext;
    private String mApiID;
    private String mApikey;
    private List<Car> list;
    public GetCarAsynTask(Context context, String apiID, String apikey) {
        mContext = context;
        mApiID = apiID;
        mApikey = apikey;
    }
    @Override
    protected HttpResponse doInBackground(Void... params) {

        HttpResponse httpResponse = null;
        try {
            String xmlData = XmlConverter.convertStreamToString(mContext.getAssets().open(ConstantsUtils.GET_CAR_FILE_NAME));
            xmlData = String.format(xmlData, mApiID, mApikey);
            httpResponse = WebServiceUtils.getCar(xmlData);
            list = getCar(httpResponse);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return httpResponse;
    }

    private List<Car> getCar(HttpResponse  response) {
        List<Car>  list;
        try {
            if (response != null) {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    InputStream is = entity.getContent();
                    XStream xstream = new XStream();
                    xstream.alias("Car", Car.class);
                    xstream.setClassLoader(Car.class.getClassLoader());
                    list = (List<Car>) xstream.fromXML(is);
                    //list = XmlPullParserHandler.getInstance().parse(is);
                    return list;
                }
            }
        } catch (Exception e) {
            Log.i("car", "error");
        }
        return null;
    }
}

这是一个xml

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope>
    <soap:Body>
        <GetCarsResponse>
            <GetCarsResult>
                <ResponseCode>0</ResponseCode>
                <ResponseText>OK</ResponseText>
                <Cars>
                    <Car>
                        <CarId>18</CarId>
                        <CarCode>NHO 314</CarCode>
                        <CarName>paddy</CarName>
                        <CarType>8 PAX LIMO</CarType>
                    </Car>
                    <Car>
                        <CarId>19</CarId>
                        <CarCode>NHO 352</CarCode>
                        <CarName />
                        <CarType>8 PAX LIMO</CarType>
                    </Car>
                    <Car>
                        <CarId>20</CarId>
                        <CarCode>NHO 382</CarCode>
                        <CarType>A CLASS</CarType>
                    </Car>
                    <Car>
                        <CarId>21</CarId>
                        <CarCode>NHO 417</CarCode>
                        <CarName />
                        <CarType>8 PAX LIMO</CarType>
                    </Car>
                </Cars>
            </GetCarsResult>
        </GetCarsResponse>
    </soap:Body>
</soap:Envelope>

最佳答案

我喜欢你添加 Car.java 文件和 Car.java 需要的所有其他类......

我成功地尝试重现异常。也许您想查看源代码 GitHub:CarParser

如果您执行代码,您将抛出异常。所以取消注释第 22 行,一切正常。

关于android - android 中的 com.thoughtworks.xstream.mapper.CannotResolveClassException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27378834/

相关文章:

java - Retrofit - 如何从 json 对象获取响应

c# - 如何获取没有子元素的元素?

java - 使用 Java 中的模式和匹配器搜索字符串中的元素

C# XML 序列化 - 削弱封装?

java - 使用 XStream 为 Set 的内容起别名

java - 使用对先前标记的引用以及与某个类的子类型对应的子项来解析 XML

java - 如何在Toast中显示数组

android - 在 onStart() 中获取 fragment 宽度 0

android - 如何在 AOSP 启动器之前添加我的应用程序

xml - 使用 XSL 将 XML 转换为 HTML 后无数据显示