Android改造:每次出现故障时,我都希望从子类中获得“标题”

问题描述

主活动就是这样

      Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        ApiCallInterface apiCallInterface = retrofit.create(ApiCallInterface.class);
        Call<MenuResponse> call = apiCallInterface.getResponseData("eyJhcglrZXkiOiI1YTRmNzRiNTUyNzUxOWMwYzY3MGMwZWQ5MDRhZTM0MSJ9");

        call.enqueue(new Callback<MenuResponse>() {
            @Override
            public void onResponse(Call<MenuResponse> call,Response<MenuResponse> response) {
                Log.d(TAG,"onResponse: server response" + response.toString());
                Log.d(TAG,"onResponse: received info" + response.body().toString());

                List<Datum> children = response.body().getData();

                for (int i = 0; i < children.size(); i++) {
                    Log.d(TAG,"onresopnse" +
                            "title: " + children.get(i).getTitle());
                }
            }

            @Override
            public void onFailure(Call<MenuResponse> call,Throwable t) {
                Log.d(TAG,"onFailure something went wrong" + t.getMessage());
                Toast.makeText(ContactUsActivity.this,"Something went wrong!",Toast.LENGTH_SHORT).show();
            }
        });

Api接口有点像这样:

    public interface ApiCallInterface {
    @POST("menu")
    Call<MenuResponse> getResponseData(@Query("data") String data);
}

这是我的主要Model类,名为:menuresponse

    public class MenuResponse {

    @Serializedname("data")
    private List<Datum> mData;

    public List<Datum> getData() {
        return mData;
    }

    public void setData(List<Datum> data) {
        mData = data;
    }
}

来自菜单响应基准类:

    public class Datum {
    @Serializedname("childs")
    private List<Child> mChilds;
    @Serializedname("ID")
    private Long mID;
    @Serializedname("menu_item_parent")
    private String mMenuItemParent;
    @Serializedname("object")
    private String mObject;
    @Serializedname("object_id")
    private String mObjectId;
    @Serializedname("title")
    private String mTitle;
    @Serializedname("type")
    private String mType;
    @Serializedname("url")
    private String mUrl;

    public List<Child> getChilds() {
        return mChilds;
    }

    public void setChilds(List<Child> childs) {
        mChilds = childs;
    }

    public Long getID() {
        return mID;
    }

    public void setID(Long iD) {
        mID = iD;
    }

    public String getMenuItemParent() {
        return mMenuItemParent;
    }

    public void setMenuItemParent(String menuItemParent) {
        mMenuItemParent = menuItemParent;
    }

    public String getobject() {
        return mObject;
    }

    public void setobject(String object) {
        mObject = object;
    }

    public String getobjectId() {
        return mObjectId;
    }

    public void setobjectId(String objectId) {
        mObjectId = objectId;
    }

    public String getTitle() {
        return mTitle;
    }

    public void setTitle(String title) {
        mTitle = title;
    }

    public String getType() {
        return mType;
    }

    public void setType(String type) {
        mType = type;
    }

    public String getUrl() {
        return mUrl;
    }

    public void setUrl(String url) {
        mUrl = url;
    }

}

从Datum子类来看,

    public class Child {
    @Serializedname("childs")
    private List<Child> mChilds;
    @Serializedname("ID")
    private Long mID;
    @Serializedname("menu_item_parent")
    private String mMenuItemParent;
    @Serializedname("object")
    private String mObject;
    @Serializedname("object_id")
    private String mObjectId;
    @Serializedname("title")
    private String mTitle;
    @Serializedname("type")
    private String mType;
    @Serializedname("url")
    private String mUrl;

    public List<Child> getChilds() {
        return mChilds;
    }

    public void setChilds(List<Child> childs) {
        mChilds = childs;
    }

    public Long getID() {
        return mID;
    }

    public void setID(Long iD) {
        mID = iD;
    }

    public String getMenuItemParent() {
        return mMenuItemParent;
    }

    public void setMenuItemParent(String menuItemParent) {
        mMenuItemParent = menuItemParent;
    }

    public String getobject() {
        return mObject;
    }

    public void setobject(String object) {
        mObject = object;
    }

    public String getobjectId() {
        return mObjectId;
    }

    public void setobjectId(String objectId) {
        mObjectId = objectId;
    }

    public String getTitle() {
        return mTitle;
    }

    public void setTitle(String title) {
        mTitle = title;
    }

    public String getType() {
        return mType;
    }

    public void setType(String type) {
        mType = type;
    }

    public String getUrl() {
        return mUrl;
    }

    public void setUrl(String url) {
        mUrl = url;
    }

    @Override
    public String toString() {
        return "Child{" +
                "mChilds=" + mChilds +
                ",mID=" + mID +
                ",mMenuItemParent='" + mMenuItemParent + '\'' +
                ",mObject='" + mObject + '\'' +
                ",mObjectId='" + mObjectId + '\'' +
                ",mTitle='" + mTitle + '\'' +
                ",mType='" + mType + '\'' +
                ",mUrl='" + mUrl + '\'' +
                '}';
    }
}

所以我想从Web服务获取数据,而json数据在子级中有多个子级,所以我完全感到困惑Nd尝试了很多事情,但是Nd onFailure遇到了同样的错误,所以我认为问题在mainactivity之内。

我的目标是从子班获得头衔。

解决方法

修改后的答案

如果您想从title列表中获取Child

List<Child> childList = response.body().getData().get(position).getChilds();

然后您可以像这样从title访问childList

String title = childList.get(position).getTitle();

修改

访问title类的Child

               //First we will add child data in childList
                    List<Child> childList = new ArrayList<>();
                    for(int i=0;i< response.body().getData().size();i++){
                        childList.add(response.body().getData().get(i).getChilds());
                    }
                    //for access title in child list
                    for(int i=0;i<childList.size();i++){
                        //we suppose you want to show all title of the child class in Logs
                        Log.e("title"," "+childList.get(i).getTitle());
                    }