当前位置: 首页 > 知识库问答 >
问题:

使用截取响应200将嵌套Json对象发布到服务器

潘楚
2023-03-14

>

我还发布了我在mainactivity中迄今为止所做的尝试。JAVA

我不知道我做错了什么。但我只是得到了一个错误的回答。我引用这些示例来做一个内部json对象响应服务器的帖子。

Json格式:(已编辑)

    {
"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"
}
}

主要活动。爪哇:(编辑)

  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

共有3个答案

宿丰
2023-03-14
 @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;
        }
    };

这是为了在get/post请求期间用截击附加标题。这应该是facebook在您的android应用程序中尝试通过facebook登录时作为响应提供给您的令牌。

考虑这个,你会得到这样一个令牌登录成功。

Token="xyz"成功登录后,您必须在每次请求上附加此令牌。这在服务器端被识别。所以不要发送空标题。应该是这样的东西。

 @Override
        public Map<String, String> getHeaders() throws AuthFailureError {

            Map<String,String> params = new HashMap<String, String>();
            params.put("token","bearer + " " +yourtoken)
             return params;
        }
    };

试试看。

丁经国
2023-03-14

这样,您应该使您的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);

然后你就可以在截击请求中使用它

卫胜
2023-03-14

作为我的评论,你可以参考下面问题中我的回答中的示例代码(注意getBody()。如果您的Web服务的响应是JSONObject,您可以使用JsonObjectRequest而不是StringRequest(代码)

如何使用字符串体截击发送POST请求?

 类似资料:
  • 问题内容: 我有一个定义了POST处理程序的控制器,如下所示: 以JSON格式查看时,UIVendor对象如下所示: UIVendor bean具有一个ArrayList类型的名为“ Emails”的字段,带有适当的设置器和获取器(getEmails / setEmails)。NotificationEmail对象也具有适当的公共设置器/获取器。 当我尝试使用以下代码发布对象时: 我在日志中收到此

  • 问题内容: 我创建了一个需要发布到jersey的json,这是由grizzly运行的具有REST网络服务的服务器获取需要输出的传入json对象。我正在尝试,但不确定如何正确实施。 我有一个在加载时运行此方法的html文件 问题答案: 要将json发送到服务器,首先必须创建json 这就是构造ajax请求以将json作为post var发送的方式。 json现在将在post var中。

  • 问题内容: 我正在使用JAX-RS的Jersey实现。我想将JSON对象发布到该服务,但收到错误代码415不支持的媒体类型。我想念什么? 这是我的代码: 这是Order对象: 这样的GET请求可以完美地工作,并以JSON格式返回订单: 但是,像这样的POST请求返回415: 问题答案: 答案非常简单。我必须在请求中添加标头,其值为。没有此标头,Jersey不知道如何处理请求正文(尽管有注释)!

  • 问题内容: 我正在尝试使用HTTPie进行分析以发送一些嵌套的JSON对象,但我找不到方法。很清楚如何发送JSON对象,而不发送嵌套对象,例如 {“ user”:{“ name”:“ john”“ age”:10}} 问题答案: 您可以通过传递整个JSON: 或者使用以下命令将原始JSON指定为值:

  • 有什么方法可以创建一个Gson的自定义转换器来提取字段,从而使regetfit返回appipiate POJO吗?

  • 问题内容: 我正在使用Symfony 2开发一个项目,我已经建立了一个捆绑包来处理我的所有数据库服务,这些服务来回传递JSON数据。 我的问题/问题: 是否可以发布简单的JSON对象?目前,我通过给对象起一个名字来欺骗我的ajax调用的普通表单帖子,如果我不给它起一个名字,我似乎无法从Symfony请求对象中获取数据。 我希望能够使用一个服务包来处理来自AJAX调用或常规Symfony形式的数据。