Stephen
Stephen

Reputation: 10059

Post nested Json Object to server using volley getting response 200

Json Format : (Edited)

    {
"facebookData":{
      "about" : "",
    "access_token":"",
    "age":28,
    "birthday":"563221800",
    "email":"[email protected]",
    "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

Upvotes: 2

Views: 3342

Answers (3)

BNK
BNK

Reputation: 24114

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?

Upvotes: 1

HourGlass
HourGlass

Reputation: 1830

 @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.

Upvotes: 0

user3290180
user3290180

Reputation: 4410

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", "[email protected]" );
        jsonWholeObject.put("loginData", jsonFaceBook);

Then you can use it in a volley request

Upvotes: 0

Related Questions