当数据如下所示时,如何从改造中获取数据

时间:2018-12-31 10:23:39

标签: java android retrofit2

当我在解析服务器响应时尝试获取名称时,我得到null。您能帮我获取数据,即姓名,电子邮件和keyskills.name吗?

JSON响应在这里。

{
"freelancer": {
    "id": 3,
    "name": "trinadh",
    "title": "web developer",
    "email": "trinadh_freelancer@gmail.com",
    "gender": "Male",
    "dob": "2018-09-27",
    "website": "www.trinadh_freelancer.com",
    "country": "India",
    "state": "Karnataka",
    "city": "Bangalore",
    "user_id": 52,
    "user_role": "freelancer",
    "registered": null,
    "agreement": true,
    "address": "hsr layout",
    "qualification": "b.tech",
    "total_experience": "2",
    "prefered_location": "",
    "category": "Web Development",
    "pancard_number": "ajhfvbqjhe",
    "passport_number": "hbhfjdhbjfh",
    "country_code": null,
    "contact_number": "8765456721",
    "currency_type": "INR",
    "rate": "678.0",
    "rate_card_type": "per_hour",
    "negotiable": true,
    "taxes": "Taxes Excluded",
    "key_skills": {
        "name": "ruby",
        "relevant_experience": "2"
    },
    "other_skills": {
        "name": "animation",
        "relevant_experience": "3"
    },
    "confirmed_at": "24-Sep-2018",
    "free_trail_days_left": 83,
    "renewal_date": "24-Mar-2019",
    "image": "<img src=\"\" />"
}
}

这是我的pojo课

public class FreeLancer {
    private List<FreeLancerProfile> freelancer;

    // Constructors, getters and setters are removed for convenience
}

这是我的自由职业者个人资料

public class FreeLancerProfile {
    private int id;
    private String name;
    private String title;
    private String email;
    private String gender;
    private String dob;
    private String website;
    private String country;
    private String state;
    private String city;
    private int user_id;
    private String user_role;
    private String registered;
    private String agreement;
    private String address;
    private String qualification;
    private String total_experience;
    private String prefered_location;
    private String category;
    private String pancard_number;
    private String passport_number;
    private String country_code;
    private String contact_number;
    private String currency_type;
    private String rate;
    private String rate_card_type;
    private String negotiable;
    private String taxes;
    private List<KeySkill> key_skills;
    private List<OtherSkill> other_skills;
    private String confirmed_at;
    private String free_trail_days_left;
    private String renewal_date;
    private String image;

    // Constructors, getters and setters are removed for convenience
}

我的Pojo课堂上的关键技能

public class KeySkill {
    private int id;
    private String name;
    private String relevant_experience;

    // Constructors, getters and setters are removed for convenience
}

我的界面

public interface FreeLancerMainApi {

    @GET("{fullUrl}/profile")
    Call<FreeLancerProfile> freeLancerMain(
            @Path(value = "fullUrl", encoded = true) String fullUrl,
            @Header("Authorization") String token
    );

    @GET("{fullUrl}/profile")
    Call<KeySkill> keySkillsMain(
            @Path(value = "fullUrl", encoded = true) String fullUrl,
            @Header("Authorization") String token
    );
}

我的主要活动

String BASE_URL = "http://74.207.233.160/api/v1/freelancers/";

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

Retrofit retrofit = builder.build();
final FreeLancerMainApi api = retrofit.create(FreeLancerMainApi.class);

Call<FreeLancerProfile> call = api.freeLancerMain(freelancer_id, token);

call.enqueue(new Callback<FreeLancerProfile>() {
    @Override
    public void onResponse(Call<FreeLancerProfile> call, Response<FreeLancerProfile> response) {
        if (response.code() == 200)
        {
            name = response.body().getName();
            email = response.body().getEmail();
            contactNumber = response.body().getContact_number();
            Toast.makeText(FreelancerActivity.this, name, Toast.LENGTH_SHORT).show();
        }
        else {
        }
    }

    @Override
    public void onFailure(Call<FreeLancerProfile> call, Throwable t) {

    }
});

Call<KeySkill> call1 = api.keySkillsMain(freelancer_id, token);
call1.enqueue(new Callback<KeySkill>() {
    @Override
    public void onResponse(Call<KeySkill> call, Response<KeySkill> response) {
        if (response.code() == 200){
            skills = response.body().getName();
        }else {

        }
    }

    @Override
    public void onFailure(Call<KeySkill> call, Throwable t) {

    }
});

freeLancerMainName.setText(name);
freeLancerMainEmail.setText(email);
freeLancerContactNumber.setText(contactNumber);
freeLancerKeySkills.setText(skills);

执行此代码时,我得到的响应为空。请帮助并提前致谢!

1 个答案:

答案 0 :(得分:0)

正如我从响应中看到的那样,它没有返回数组或列表。但是,据您从代码中了解到的那样,您期望将响应解析为一个列表。

Freelancer pojo应该如下所示。

public class FreeLancer {
    public FreeLancerProfile freelancer;
}

如果其他一切正常,则应该可以正常工作。

更新:

响应应绑定到FreeLancer类,而不是FreeLancerProfile类。我已经显示了一个示例,可能会有所帮助。请检查。

public void onResponse(Call<FreeLancer> call, Response<FreeLancer> response) {
    if (response.code() == 200) {
        FreeLancer freelancer = response.body();

        name = freelancer.getName();
        email = freelancer.getEmail();
        // Others ... 
    }
}

FreelancerProfile pojo中,还需要从Listkey_skills中删除other_skills。这些也不是列表。

private KeySkill key_skills;
private OtherSkill other_skills;