【问题标题】:Use Volley Library for send and get data from server (Android - PHP)使用 Volley 库从服务器发送和获取数据 (Android - PHP)
【发布时间】:2018-08-25 05:21:23
【问题描述】:

我需要向服务器发送一个 JSONObject 并从中获取其他 JSONObject。但我无法将 JSONObject 发送到服务器,换句话说,我的 JSONObject 以空值发送到服务器。

安卓代码:

JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,
                getUrl(), new JSONObject("{\"command\":\"get_ad_list\"}"), new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.e("xxxxxxxxx-result ", response.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("xxxxxxxxx-error ", error.toString());
            }
        });
        request.setRetryPolicy(new DefaultRetryPolicy(8000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        RequestQueue requestQueue = Volley.newRequestQueue(context);
        requestQueue.add(request);

PHP 代码:

<?php
    $post_data=@$_POST['myjson'];
    $post_data=json_decode($post_data,true);
    $command=$post_data['command'];
    echo $command; //$command is null!
?>

【问题讨论】:

    标签: php android json android-volley jsonobjectrequest


    【解决方案1】:
    protected void fetchWebpage() {
        /*
            Json
         */
        final JSONObject json = new JSONObject();
        final JSONObject manJson = new JSONObject();
        try {
            manJson.put("VALUE_1", "HELLO");
            manJson.put("VALUE_2", "AM");
            manJson.put("VALUE_3", "VOLLEY");
            /*
                More values here
            */
            final String j = json.put("UPDATE", manJson).toString();
            // starts here
            final String base_url = "https://google.com";
            // Instantiate the RequestQueue.
            RequestQueue queue = Volley.newRequestQueue(this);
            // Request a string response from the provided URL.
            StringRequest stringRequest = new StringRequest(Request.Method.POST, base_url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    /*
    
                        YOUR RESPONSE FROM SERVER IS HERE
                     */
                    Log.i(TAG, "received "+response);
                    // process your response if return json
                    try {
                        JSONObject object = (JSONObject) new JSONTokener(response).nextValue();
                        Sting value_returned_from_server_1 = object.getString("value_you_return_1");
                        Sting value_returned_from_server_2 = object.getString("value_you_return_2");
                        /*
                            MORE VALUES HERE
                         */
                    } catch (JSONException e) {
                        /*Show results*/
                        Log.i(TAG, "ERROR JSON "+e.getMessage());
                        return;
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //perform operation here after getting error
                    /* unsuccessfully result - no internet */
                    return;
                }
            }) {
                @Override
                protected Map<String, String> getParams() {
                    Map<String, String> params = new HashMap<String, String>();
                    //pack message into json
                    try {
                        params.put("json", j.toString());
                    } catch (Exception e) {
                        //Log.i(TAG,"Map error: Unable to compile post");
                    }
                    return params;
                }
    
                @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;
                }
            };
            // Add the request to the RequestQueue.
            queue.add(stringRequest);
            // ends here
            return;
        } catch (Exception e) {
            //Log.i(TAG,"ERROR: Unable to get setup settings");
        } // end exception write
        return;
    }
    

    【讨论】:

    • 那么你的问题是 PHP 你回显 $command 而不是 $json 尝试 var_dump($_POST); 它会在 POST 中显示所有 var
    【解决方案2】:

    试试这个:

       JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("command","get_ad_list");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    
    
    
         JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,
                getUrl(), jsonObject, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.e("xxxxxxxxx-result ", response.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("xxxxxxxxx-error ", error.toString());
            }
        });
        request.setRetryPolicy(new DefaultRetryPolicy(8000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        RequestQueue requestQueue = Volley.newRequestQueue(context);
        requestQueue.add(request);
    

    【讨论】:

    • 还有空值的 json 对象吗?请分享它显示的错误是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    相关资源
    最近更新 更多