创建接收Android应用数据的API时$decoded返回null的问题排查
$decoded Value When Receiving Android App Data in Your API Hey there, let's walk through why your $decoded variable is returning null when processing data from your Android app, and how to fix this step by step. This is a super common issue, so we'll break down the most likely causes and solutions:
1. First, Verify How You're Receiving the Request Data
If you're using $_POST to grab the data, that's probably the problem. $_POST only works for form-encoded requests (application/x-www-form-urlencoded or multipart/form-data). If your Android app is sending raw JSON, you need to read the raw request body instead:
// Correct way to get raw JSON data $rawInput = file_get_contents('php://input'); $decoded = json_decode($rawInput, true); // Debug: Check what's actually coming in error_log("Received raw input: " . $rawInput); error_log("JSON decode error: " . json_last_error_msg()); // This tells you exactly why decode failed
If $rawInput is empty, that means your API isn't receiving any data at all—so you'll need to check the Android app's request setup first.
2. Check the Request's Content-Type Header
Your Android app must set the correct Content-Type header to application/json; charset=utf-8 when sending JSON. If it's missing or set to something else (like text/plain), some servers might not process the body correctly, or json_decode could fail.
On the API side, you can verify this with:
error_log("Content-Type: " . $_SERVER['CONTENT_TYPE']);
If it's not application/json, fix the Android code to set the header properly. For example, with OkHttp:
RequestBody body = RequestBody.create( MediaType.parse("application/json; charset=utf-8"), yourJsonString ); Request request = new Request.Builder() .url("your-api-url") .post(body) .build();
3. Validate the JSON From Android
A malformed JSON string will always make json_decode return null. Grab the JSON string your Android app is sending (you can log it in Android or use the $rawInput log from your API) and check it with a JSON validator (just search for "JSON validator" in your browser—no external tools needed here). Look for:
- Missing commas between key-value pairs
- Unclosed quotes (especially if your strings have special characters)
- Trailing commas at the end of arrays/objects
- Invalid escape characters (like unescaped backslashes)
4. Ensure UTF-8 Encoding
JSON requires UTF-8 encoding. If your Android app is sending data in a different charset (like ISO-8859-1 or GBK), json_decode might fail. You can convert the input to UTF-8 on the API side to fix this:
$rawInput = file_get_contents('php://input'); // Convert to UTF-8 if needed $rawInput = mb_convert_encoding($rawInput, 'UTF-8', mb_detect_encoding($rawInput)); $decoded = json_decode($rawInput, true);
5. Check for Empty or Missing Data
If $rawInput is empty, that means your Android app isn't actually sending any data. Double-check the Android code:
- Did you correctly build the JSON string?
- Is the request being sent successfully (check for network errors in Android logs)?
- Are you using the correct HTTP method (POST/PUT, not GET)?
Quick Debug Checklist
- Use
php://inputinstead of$_POSTfor raw JSON - Verify
Content-Typeisapplication/json - Validate the JSON string for syntax errors
- Ensure encoding is UTF-8
- Log raw input and JSON decode errors to pinpoint the issue
Once you work through these steps, you should be able to figure out why $decoded is null and fix it. Let me know if you hit any specific snags with the debug logs!
内容的提问来源于stack exchange,提问作者Manoj kumar

