首页 > 解决方案 > Android Volley 发送空的 POST PHP

问题描述

我的请求到达服务器,但我的 $_POST 在服务器端显示为空。我尝试了几种不同的方法,包括没有 Volley,但它仍然是空的。

这是我的安卓代码:

public static void register(Context context){
    String url = "https://cserra.com/gbc";

    //Post parameters
    final String action = "register";
    final String name = text_name.getText().toString();
    final String email = text_email.getText().toString();
    final String facebook_id = "0";
    final String auth_code = "";
    final String os_id = "xxxx";

    RequestQueue queue = Volley.newRequestQueue(context);
    StringRequest sr = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d(TAG,response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d(TAG,error.getMessage());
        }
    }) {
        @Override
        public byte[] getBody() throws AuthFailureError {
            HashMap<String, String> params2 = new HashMap<String, String>();
            params2.put("action", action);
            params2.put("name", name);
            params2.put("email", email);
            params2.put("facebook_id", facebook_id);
            params2.put("auth_code", auth_code);
            params2.put("os_id", os_id);
            return new JSONObject(params2).toString().getBytes();
        }

        @Override
        public String getBodyContentType() {
            return "application/json";
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json; charset=utf-8");
            return headers;
        }
    };
    queue.add(sr);
}

这是我的 PHP 代码:

<?php
echo file_get_contents("php://input");
print_r($_POST);

这是我的回应:

D/MainActivity: 数组 ( )

标签: phpandroidpostandroid-volley

解决方案


我已经将我的代码更改为这个,现在它可以工作了。

编辑:注意我创建了一个队列单例,它也可以修复 StringRequest 代码。

private void register(Context context){
    String url = "https://cserra.com/gbc/";

    //Post parameters
    final String action = "register";
    final String name = text_name.getText().toString();
    final String email = text_email.getText().toString();
    final String facebook_id = "0";
    final String auth_code = "";
    final String os_id = "xxxx";

    RequestQueue queue = SingletonRequestQueue.getInstance(getApplicationContext()).getRequestQueue();

    VolleyLog.DEBUG = true;
    String uri = BASE_URL;

    JSONObject jsonObject = new JSONObject();
    try {
        jsonObject.put("action", action);
        jsonObject.put("name", name);
        jsonObject.put("email", email);
        jsonObject.put("facebook_id", facebook_id);
        jsonObject.put("auth_code", auth_code);
        jsonObject.put("os_id", os_id);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(uri, jsonObject, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.d(TAG,"RESPONSE: "+response.toString());
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d(TAG,"ERROR: "+error.toString());
        }
    });

    queue.add(jsonObjectRequest);
}

单例代码:

package com.christopherserra.myapp;

import android.content.Context;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

public class SingletonRequestQueue {

    private static SingletonRequestQueue mInstance;
    private Context mContext;
    private RequestQueue mRequestQueue;

    private SingletonRequestQueue(Context context) {
        mContext = context;
        mRequestQueue = getRequestQueue();
    }

    public static synchronized SingletonRequestQueue getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new SingletonRequestQueue(context);
        }
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            mRequestQueue = Volley.newRequestQueue(mContext);
        }
        return mRequestQueue;
    }
}

推荐阅读