Post nested Json Object to server using volley getting response 200

六月ゝ 毕业季﹏ 提交于 2020-01-11 07:10:12

问题


  • 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!