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

发送json对象,在字符串截击中等待响应

禄源
2023-03-14

我一直在使用volley库与我的android应用程序一起消费服务。我注意到一些奇怪的事情,当我试图将一个json对象发送到服务器时,我必须创建一个JSONObject类型的响应监听器。但我的服务器返回一个字符串,成功或失败。是否可以编写一个等待字符串响应的JsonObjectRequest?这就是我所写的。服务运行正常,但由于无法将字符串收敛到JSON,在成功post后会触发onErrorResponse

            JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, jsonBody,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        Toast.makeText(StartingActivity.this,response.toString(),Toast.LENGTH_SHORT).show();

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                error.printStackTrace();
                Toast.makeText(StartingActivity.this,"That didn't work",Toast.LENGTH_SHORT).show();

            }
        });


        RequestQueue queue = Volley.newRequestQueue(this);
        queue.add(jsonRequest);

共有1个答案

濮阳和泰
2023-03-14

使用StringRequest而不是JSONObjectRequest。它将以字符串形式返回响应,如下所示:

 StringRequest stringRequest = new StringRequest(Request.Method.POST,url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                                 Log.e(TAG,response); 
                           },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    error.printStackTrace();
                }
            }) {
        @Override
        public byte[] getBody() throws AuthFailureError {
            //use this to post data.
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            //use this for headers.
        }

    };

stringRequest.setRetryPolicy(new RetryPolicy() {
        @Override
        public int getCurrentTimeout() {
            return 50000;
        }

        @Override
        public int getCurrentRetryCount() {
            return 50000;
        }

        @Override
        public void retry(VolleyError error) throws VolleyError {

        }
    });

    RequestQueue requestQueue = Volley.newRequestQueue(context);
    requestQueue.add(stringRequest);
 类似资料:
  • 用简单的话来说,我想发送这个数据到服务器,使用Volley Post Request。 它有一个整数和一个字符串,我得到的响应是Jsonarray 我尝试过以下方法,但都不管用 > 因为它是json数组请求,我不能在参数中发送数据,因为第三个参数只需要JsonArray,我必须发送JsonObject,所以保持为null 我不能把它放在中,因为值的1是整数,并且它只接受字符串 getparams(

  • 我想在我的代码中使用Volley,我应该在下面的响应中使用哪种请求类型,我不明白。URL:::http://localhost/api/product/read.php

  • 问题内容: 我是后端代码的新手,我正在尝试创建一个将对我的JSON字符串进行响应的函数。我目前有一个例子 这基本上只是打印字符串“应该以JSON形式出现的随机数”。我要执行的操作是使用任何数字的JSON字符串进行响应。我需要放置其他内容类型吗?该函数应该将该值传递给客户端的另一个用户吗? 谢谢你的帮助! 问题答案: 在Express中使用res.json: 或者:

  • 问题内容: 我如何发送VitalGroupID和Temperature作为整数而不是String…。这是在我点击Submit按钮后形成的请求。 问题答案: 严格来说,json是无类型的,因此您不能将其作为整数发送,它必须是字符串。javascript对象不太严格,因此您拥有的对象将评估为javascript对象,但没有严格的json解析器将能够理解它。 最好的办法是使用parseInt在客户端转换

  • 问题内容: 我有一个.NET中的SOAP Web服务返回的JSON字符串。如下: 现在,我想将此字符串解析为JSON对象。我也看了这个,他们已经用这行代码: 所以我可以通过用我的字符串名称替换“ json”来做到这一点。还需要引用除NewtonSoft.dll以外的任何其他dll吗? 顺便说一句,这是完整的网络服务代码 问题答案: 用 您需要System.Web.Extensions dll并导入

  • 问题内容: 我需要添加一个通常为http:\ somewebsite.com \ somepage.asp格式的URL。当我使用上述URL创建字符串并将其添加到JSON对象json中时 使用 它附加了一个额外的“ \”,当我检查输出时,就像 当我将URL作为 json输出时 您能帮我按原样检索URL吗? 谢谢 问题答案: 您的JSON库会自动转义斜线等字符。在接收端,您必须使用像这样的函数删除那些