无法在Retrofit 2中获取json对象和数组

时间:2016-01-16 21:12:27

标签: java android json rest retrofit2

我正在尝试从api http://badiyajobs.com/apis/v1/roles解析json,但是response.isSuccess返回false 我的模态类是,

package arpit.retrodemo;


import java.util.List;
import java.util.ArrayList;

public class Modal {           

    private List<RolesEntity> roles = new ArrayList<>();

    public void setRoles(List<RolesEntity> roles) {
        this.roles = roles;
    }

    public List<RolesEntity> getRoles() {
        return roles;
    }

    public static class RolesEntity {
        private String id;
        private String role;
        private String description;
        private String icon_url;
        private String created_at;
        private String updated_at;

        public void setId(String id) {
            this.id = id;
        }

        public void setRole(String role) {
            this.role = role;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public void setIcon_url(String icon_url) {
            this.icon_url = icon_url;
        }

        public void setCreated_at(String created_at) {
            this.created_at = created_at;
        }

        public void setUpdated_at(String updated_at) {
            this.updated_at = updated_at;
        }

        public String getId() {
            return id;
        }

        public String getRole() {
            return role;
        }

        public String getDescription() {
            return description;
        }

        public String getIcon_url() {
            return icon_url;
        }

        public String getCreated_at() {
            return created_at;
        }

        public String getUpdated_at() {
            return updated_at;
        }
    }
}

示例json是,

{"roles":[
    {
      "id":"1",
      "role":"Retail Sales Executive",
      "description":"As a sales assistant....",
      "icon_url":"",
      "created_at":"2015-10-02 12:03:03",
      "updated_at":null
    }
  ] 
}


APIService.java是,

package arpit.retrodemo;

import retrofit.Call;
import retrofit.http.GET;

public interface APIService {
    @GET("/roles")
    Call<Modal> getDetails();
}


MainActivity.java是,

package arpit.retrodemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import retrofit.Call;
import retrofit.Callback;
import retrofit.GsonConverterFactory;
import retrofit.Response;
import retrofit.Retrofit;

public class MainActivity extends AppCompatActivity {

    private static final String ENDPOINT = "http://badiyajobs.com/apis/v1";
    private APIService service;
    private Modal mod;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(ENDPOINT)
                .build();
        service = retrofit.create(APIService.class);
        Call<Modal> userList = service.getDetails();
        userList.enqueue(new Callback<Modal>() {
            @Override
            public void onResponse(Response<Modal> response) {
                if(response.isSuccess()){
                    Log.d("findRes", response.body().toString());
                }else{
                    Log.d("find", "Something is wrong! " + response.errorBody().toString());
                }
            }

            @Override
            public void onFailure(Throwable t) {
                Log.d("findError", t.getMessage());
            }
        });
    }
}


这里我在logcat上得到以下内容,

D/find: Something is wrong! com.squareup.okhttp.ResponseBody$1@52715c98


而不是response.body()

的字符串表示

1 个答案:

答案 0 :(得分:2)

您需要执行以下操作:

public interface APIService {
    @GET("roles") /*removed the / here */
    Call<Modal> getDetails();
}

private static final String ENDPOINT = "http://badiyajobs.com/apis/v1/"; /* added the / here */