【问题标题】:Android POST request with a large JSON in volleyAndroid POST 请求中包含大量 JSON
【发布时间】:2018-02-05 16:23:58
【问题描述】:

我正在尝试发送一个附有 JSON 的 POST 请求。在正常情况下,如果我在

处请求
 https://avinash-server.herokuapp.com/api/jsonData/["hsh","jjsj"]

数据发送成功,其中 ["hsh","jjsj"] 是 JSON 数据。如果我使用更大的 JSON 数据发送相同的请求。

["avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp","avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp","avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp", "avi", "sp"]

我没有得到任何成功的回应。

这是我的代码,请帮忙。

 submitButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            RequestQueue myRequestQueue = Volley.newRequestQueue(MainActivity.this);
            String url = "https://avinash-server.herokuapp.com/api/jsonData/" + postData.toString();
            StringRequest MyStringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    //This code is executed if the server responds, whether or not the response contains data.
                    //The String 'response' contains the server's response.
                    Toast.makeText(MainActivity.this,response,Toast.LENGTH_SHORT).show();



                }
            }, new Response.ErrorListener() { //Create an error listener to handle errors appropriately.
                @Override
                public void onErrorResponse(VolleyError error) {
                    //This code is executed if there is an error.
                    textView.setText(error.toString());
                    Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_SHORT).show();
                }
            });
            myRequestQueue.add(MyStringRequest);


        }
    });

【问题讨论】:

  • 你有这方面的线索吗?我的用户的 LG Nexus 5X 设备似乎遇到了类似的问题。当我查看我的网络服务器日志时,没有来自那些 Nexus 5X 设备的请求。不过它适用于其他手机!

标签: android json android-volley


【解决方案1】:

这里首先要提到的是

["avi", "sp", "avi", "sp", ... ]

不是 JSON 数据!

看看https://www.w3schools.com/js/js_json_intro.asp

您应该有一个键值对。我将在这里放置一个有效的 volley POST 请求的示例:

private void registerUser(final String name, final String email,
                          final String password) {

    pDialog.setMessage("Registering ...");
    showDialog();

    //Adding the user email and password to a MAP to build a JSON from it
    Map<String, String> params = new HashMap<String, String>();
    params.put("email", email);
    params.put("password", password);
    params.put("fullName", name);

    final JSONObject request = new JSONObject(params);

    final JsonObjectRequest req = new JsonObjectRequest(AppConfig.URL_REGISTER, request,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    hideDialog();

                    try {
                        JSONObject jObj = response;

                            //Extracting data from response
                            String uid = jObj.getString("_id");
                            String name = jObj.getString("fullName");
                            String email = jObj.getString("email");

                            Intent intent = new Intent(
                                    RegisterActivity.this,
                                    someClass.class);
                            startActivity(intent);
                            finish();
                        } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        try {
                           //SOME ACTION IF THE RESPONSE STATUS CODE IS NOT 4xx or 5xx
                        } catch (Exception e){
                            Toast.makeText(getApplicationContext(),
                                    "Try once again, please...", Toast.LENGTH_LONG).show();
                        }
                        hideDialog();
        }

如果您有任何问题,请告诉我

您的问题中提到的事情:您正在发送一个帖子请求,其中包含作为 url 参数附加的数据。这使得 POST 和 GET 有所不同。在 POST 请求中,您必须在 JSON 正文中附加数据

【讨论】:

  • 我不知道根据 (jsonlint.com) 它是有效的 JSON。和 Thnak You
  • 我已经更新了答案。请检查一下。 JSON具有以下结构: { "key": "value" } 在您的情况下,如果您想要一个有效的 json 从您的结构中取出,您有一个简单的字符串数组,它可能是 {"key": [{"key1" :"val1" }, ... { ... }]}
  • JSON spec 中没有任何内容表明启动令牌必须是对象。它可以是任何有效的 JSON 值,包括数组和原语。
【解决方案2】:

请尝试更改请求时间, 它对我有用

私有 int MY_SOCKET_TIMEOUT_MS = 10000;

            final JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                if (mResultCallback != null)
                    mResultCallback.notifySuccess(requestType, response);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                if (mResultCallback != null)
                    mResultCallback.notifyError(requestType, error);

            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                final Map<String, String> headers = new HashMap<>();
                String base64EncodedCredentials = Base64.encodeToString(String.format(authHeaders).getBytes(), Base64.NO_WRAP);
                headers.put("Authorization", "Basic " + base64EncodedCredentials);
                return headers;
            }

            @Override
            protected VolleyError parseNetworkError(VolleyError volleyError) {
                if (volleyError.networkResponse != null && volleyError.networkResponse.data != null) {
                    VolleyError error = new VolleyError(new String(volleyError.networkResponse.data));
                    volleyError = error;

                }
                return volleyError;
            }
        };

        jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
                MY_SOCKET_TIMEOUT_MS,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        VolleySingleton.getInstance(mContext).addToRequestQueue(jsonObjReq);

【讨论】:

    猜你喜欢
    • 2016-04-24
    • 2011-04-30
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多