Android 解析单对象响应

Android 解析单对象响应,android,jsonparser,Android,Jsonparser,我试图解析这个JSON,但在日志中没有得到任何结果。 示例json: { "coach_details": { "coach_id": "1556", "academy_id": "1", "username": "testcoach@gmail.com", "first_name": "test", "last_name": "test", "gender": "female",

我试图解析这个JSON,但在日志中没有得到任何结果。 示例json:

   {
    "coach_details": {
        "coach_id": "1556",
        "academy_id": "1",
        "username": "testcoach@gmail.com",
        "first_name": "test",
        "last_name": "test",
        "gender": "female",
        "email": "",
        "mobile": "9874563210",
        "middle_name": "",
        "nick_name": "",
        "state": "4"
    },
    "status": 1,
    "message": "success"
   }
我试过这个:

 @Override
 public void onResponse(JSONObject response) {
 if (response != null) {
      Log.d(TAG, "Response:\t" + response.toString());

      try {
         JSONObject jsonObject = new JSONObject(response.toString());
         JSONObject details = jsonObject.getJSONObject("coach_details");
         coachId = details.getString("coach_id");
         Log.d(TAG, "Coach id:\t" + coachId);
         Log.d(TAG, "Details:\t" + details);
      } catch (JSONException e) {
         e.printStackTrace();
      }
  }
}

我可以用什么方法解析这个响应来获取详细的对象键?谢谢。

我希望这对你有用

@Override
 public void onResponse(JSONObject response) {
 if (response != null) {
      Log.d(TAG, "Response:\t" + response.toString());

      try {
         // response is already JSONObject.
         // JSONObject jsonObject = new JSONObject(response.toString());
         if (response.has("coach_details"){
             JSONObject details = response.getJSONObject("coach_details");
                  if (details.has("coach_id"){
                       coachId = details.getString("coach_id");
                       Log.d(TAG, "Coach id:\t" + coachId);
                       Log.d(TAG, "Details:\t" + details);
                  } else { 
                       Log.d(TAG, "It has Not coach_id data");
                  }
         } else {
            Log.d(TAG, "It has Not coach_details data");
         }
      } catch (JSONException e) {
         e.printStackTrace();
      }
  }
}
试着这样,

 try {
            JSONObject jsonObject1 = new JSONObject(response.toString());
            JSONObject jsonObject2 = jsonObject1.getJSONObject("coach_details");
            String coach_id = jsonObject2.getString("coach_id");
            String academy_id = jsonObject2.getString("academy_id");

            String status = jsonObject1.getString("status");
            String message = jsonObject1.getString("message");

            Log.e("coach_id", coach_id);
            Log.e("academy_id", academy_id);
            Log.e("status", status);
            Log.e("message", message);


        } catch (JSONException e) {
            e.printStackTrace();
        }

确保您收到服务器提供的响应。

我正在发布我尝试的完整代码。 我可以看到所有的日志

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


        String url = "http://devsports.copycon.in/api/coach_login";

        Map<String, String> params = new HashMap();
        params.put("username", "testcoach@gmail.com");
        params.put("password", "123@abcd");

        JSONObject parameters = new JSONObject(params);

        JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, parameters, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                if (response != null) {
                    Log.d(TAG, "Response:\t" + response.toString());

                    try {
                        JSONObject jsonObject = new JSONObject(response.toString());
                        JSONObject details = jsonObject.getJSONObject("coach_details");
                        String coachId = details.getString("coach_id");
                        Log.d(TAG, "Coach id:\t" + coachId);
                        Log.d(TAG, "Details:\t" + details);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                //TODO: handle failure
            }
        });

        Volley.newRequestQueue(this).add(jsonRequest);

    }
考虑到您的映射类如下所示:

public class CoachResponse {

    @SerializedName("coach_details")
    @Expose
    private CoachDetails coachDetails;
    @SerializedName("status")
    @Expose
    private Integer status;
    @SerializedName("message")
    @Expose
    private String message;

    public CoachDetails getCoachDetails() {
        return coachDetails;
    }

    public void setCoachDetails(CoachDetails coachDetails) {
        this.coachDetails = coachDetails;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }


    public class CoachDetails {

        @SerializedName("coach_id")
        @Expose
        private String coachId;
        @SerializedName("academy_id")
        @Expose
        private String academyId;
        @SerializedName("username")
        @Expose
        private String username;
        @SerializedName("first_name")
        @Expose
        private String firstName;
        @SerializedName("last_name")
        @Expose
        private String lastName;
        @SerializedName("gender")
        @Expose
        private String gender;
        @SerializedName("email")
        @Expose
        private String email;
        @SerializedName("mobile")
        @Expose
        private String mobile;
        @SerializedName("middle_name")
        @Expose
        private String middleName;
        @SerializedName("nick_name")
        @Expose
        private String nickName;
        @SerializedName("state")
        @Expose
        private String state;

        public String getCoachId() {
            return coachId;
        }

        public void setCoachId(String coachId) {
            this.coachId = coachId;
        }

        public String getAcademyId() {
            return academyId;
        }

        public void setAcademyId(String academyId) {
            this.academyId = academyId;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getFirstName() {
            return firstName;
        }

        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }

        public String getLastName() {
            return lastName;
        }

        public void setLastName(String lastName) {
            this.lastName = lastName;
        }

        public String getGender() {
            return gender;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;
        }

        public String getMobile() {
            return mobile;
        }

        public void setMobile(String mobile) {
            this.mobile = mobile;
        }

        public String getMiddleName() {
            return middleName;
        }

        public void setMiddleName(String middleName) {
            this.middleName = middleName;
        }

        public String getNickName() {
            return nickName;
        }

        public void setNickName(String nickName) {
            this.nickName = nickName;
        }

        public String getState() {
            return state;
        }

        public void setState(String state) {
            this.state = state;
        }

    }

}

您是否在日志中得到响应?如果出现任何响应,请同时记录
JSONException
!您确定收到了响应吗?@HeisenBrg,没有出现异常,响应被打印出来,但不是密钥fields@Mangal,响应(来自第一个日志)很好,因为示例json只是从中获得的。不起作用。仅记录响应,但不记录coachidshowing@Andromeda试试我的答案。我修正了密码。并显示logNot getting字段broI认为您没有从url获得空响应,请检查。您是否尝试在
onResponse
方法中传递
String
而不是
JSONObject
?。如果响应是
String
,那么这个答案就是解决这个问题的实际解决方案。是的,我认为如果将StringRequest与volly一起使用,将解决这个问题。这两种方法对我都不起作用。你能试试这个库吗?快安卓网络库,它比截击更容易,并且能看到结果。ThanksI通过使android studio失效并重新启动解决了这个问题。问题是日志没有显示json解析。我使用了你的gson代码,它非常棒。答案被接受。非常感谢你。
public class CoachResponse {

    @SerializedName("coach_details")
    @Expose
    private CoachDetails coachDetails;
    @SerializedName("status")
    @Expose
    private Integer status;
    @SerializedName("message")
    @Expose
    private String message;

    public CoachDetails getCoachDetails() {
        return coachDetails;
    }

    public void setCoachDetails(CoachDetails coachDetails) {
        this.coachDetails = coachDetails;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }


    public class CoachDetails {

        @SerializedName("coach_id")
        @Expose
        private String coachId;
        @SerializedName("academy_id")
        @Expose
        private String academyId;
        @SerializedName("username")
        @Expose
        private String username;
        @SerializedName("first_name")
        @Expose
        private String firstName;
        @SerializedName("last_name")
        @Expose
        private String lastName;
        @SerializedName("gender")
        @Expose
        private String gender;
        @SerializedName("email")
        @Expose
        private String email;
        @SerializedName("mobile")
        @Expose
        private String mobile;
        @SerializedName("middle_name")
        @Expose
        private String middleName;
        @SerializedName("nick_name")
        @Expose
        private String nickName;
        @SerializedName("state")
        @Expose
        private String state;

        public String getCoachId() {
            return coachId;
        }

        public void setCoachId(String coachId) {
            this.coachId = coachId;
        }

        public String getAcademyId() {
            return academyId;
        }

        public void setAcademyId(String academyId) {
            this.academyId = academyId;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getFirstName() {
            return firstName;
        }

        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }

        public String getLastName() {
            return lastName;
        }

        public void setLastName(String lastName) {
            this.lastName = lastName;
        }

        public String getGender() {
            return gender;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }

        public String getEmail() {
            return email;
        }

        public void setEmail(String email) {
            this.email = email;
        }

        public String getMobile() {
            return mobile;
        }

        public void setMobile(String mobile) {
            this.mobile = mobile;
        }

        public String getMiddleName() {
            return middleName;
        }

        public void setMiddleName(String middleName) {
            this.middleName = middleName;
        }

        public String getNickName() {
            return nickName;
        }

        public void setNickName(String nickName) {
            this.nickName = nickName;
        }

        public String getState() {
            return state;
        }

        public void setState(String state) {
            this.state = state;
        }

    }

}