问题
I am getting false response while hitting the post response api using volley.Below I have posted the json format.
And also I have posted what I had tried so far in mainactivity.java.
I don't know What I did wrong.But i am getting a false response simply.I referred these Sample to do a post with inner json object response to server.
Json Format : (Edited)
{
"facebookData":{
"about" : "",
"access_token":"",
"age":28,
"birthday":"563221800",
"email":"mailtosteve3@gmail.com",
"facebook_user_id":"561394210664929",
"first_name":"Bradley",
"gender":"male",
"id":"561394210664929",
"is_show_only":"Men and Women",
"latitude":"13.05505200",
"longitude":"80.23623600",
"name":"Bradley Cummings",
"profilePicture":"",
"provider":"Facebook"
}
}
MainActivity.java: (Edited)
private void validateUser() {
final ProgressDialog dialog = ProgressDialog.show(FacebookActivity.this, null, null);
ProgressBar spinner = new android.widget.ProgressBar(FacebookActivity.this, null, android.R.attr.progressBarStyle);
spinner.getIndeterminateDrawable().setColorFilter(Color.parseColor("#009689"), android.graphics.PorterDuff.Mode.SRC_IN);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(spinner);
dialog.setCancelable(false);
dialog.show();
try {
RequestQueue queue = Volley.newRequestQueue(FacebookActivity.this);
String userValidationURL = BurblrUtils.BR_FB;
Log.e("userValidationURL", userValidationURL);
jsonWholeObject = new JSONObject();
JSONObject jsonFaceBook = new JSONObject();
jsonFaceBook.put("about", "Note");
jsonFaceBook.put("access_token", facebookAccessToken);
jsonFaceBook.put("age", "28");
jsonFaceBook.put("birthday", "563221800");
jsonFaceBook.put("email", emailString);
jsonFaceBook.put("facebook_user_id", faceBookId);
jsonFaceBook.put("first_name", firstString);
jsonFaceBook.put("gender", genderString);
jsonFaceBook.put("id", id);
jsonFaceBook.put("is_show_only", "Men and Women");
jsonFaceBook.put("latitude", "13.05505200");
jsonFaceBook.put("longitude", "80.23623600");
jsonFaceBook.put("name", firstString + lastString);
jsonFaceBook.put("profilePicture", profile_pic);
jsonFaceBook.put("provider", "Facebook");
jsonWholeObject.put("facebookData", jsonFaceBook);
mRequestBody = jsonWholeObject.toString();
StringRequest request = new StringRequest(Request.Method.POST, userValidationURL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("FaceBookRes", response);
if (response != null && !response.startsWith("<HTML>")) {
Log.e("onResponse", "" + response);
dialog.dismiss();
try {
JSONObject login_obj = new JSONObject(response);
String message = login_obj.getString("message");
String error = login_obj.getString("error");
if (message.equals("Facebook Connection problem")) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
} else {
Log.e("Else...", "Else...");
Intent intent = new Intent(FacebookActivity.this, HomeActivity.class);
startActivity(intent);
finish();
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
dialog.dismiss();
Toast.makeText(getApplicationContext(), "Internet Toast Message", Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error != null) {
Log.e("error", error.toString());
dialog.dismiss();
}
}
}) {
@Override
public String getBodyContentType() {
return "application/json; charset=utf-8";
}
@Override
public byte[] getBody() throws AuthFailureError {
try {
mRequestBody = jsonWholeObject.toString();
return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s",
mRequestBody, "utf-8");
return null;
}
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String responseString = "";
if (response != null) {
responseString = String.valueOf(response.statusCode);
// can get more details such as response.headers
}
return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
}
};
queue.add(request);
} catch (JSONException je) {
je.printStackTrace();
}
}
Logcat:
04-01 06:45:15.606 12667-12667/? E/FaceBookRes: 200
04-01 06:45:15.606 12667-12667/? E/onResponse: 200
回答1:
As my comments, you can refer to the sample code at my answer at the following question (pay attention to getBody()
. If the response from your web service is a JSONObject
, you can use JsonObjectRequest
instead of StringRequest
)
How to send a POST request using volley with string body?
回答2:
this way you should make your JSON
JSONObject jsonWholeObject = new JSONObject();
JSONObject jsonFaceBook = new JSONObject();
try {
jsonFaceBook.put("age", "28");
jsonFaceBook.put("birthday", "563221800");
jsonFaceBook.put("first_name", "Bradley");
jsonFaceBook.put("gender", "male");
jsonFaceBook.put("provider", "Facebook");
} catch (JSONException e) {
e.printStackTrace();
}
jsonWholeObject.put("email", "steve123@gmail.com" );
jsonWholeObject.put("loginData", jsonFaceBook);
Then you can use it in a volley request
回答3:
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> params = new HashMap<String, String>();
params.put("Content-Type", "application/x-www-form-urlencoded");
return params;
}
};
this is to attache Headers with volley during a get/post request. This should be the token that facebook have provided you as response, when you tried to login through facebook login in your android application.
consider this, you will get a token like this for successful login.
token = "xyz" After successful login you have to attach this token with header on every request you make. This is identified at server end. So don't send a empty header. It should be something like this.
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> params = new HashMap<String, String>();
params.put("token","bearer + " " +yourtoken)
return params;
}
};
Give it a try.
来源:https://stackoverflow.com/questions/35895134/post-nested-json-object-to-server-using-volley-getting-response-200