Android到PHP的HTTP POST会引发NullPointer错误

时间:2015-12-30 09:49:10

标签: php android json android-json

我想为一个php脚本创建一个简单的HTTPRequest,用于注册一些参数(名称,电子邮件,密码等)。我尝试过很多来自互联网的教程,但对我来说没什么用。 HTTP POST抛出NullpointerException。在后端也显示为null。

我的代码是:

        //JSON Node Names

        private static final String TAG_ID = "status";
        private static final String TAG_NAME = "code";
        private static final String TAG_EMAIL = "message";
        //POST data
        HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(url);

                // Add your data
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);
                nameValuePairs.add(new BasicNameValuePair("user_name", "Steve"));
                nameValuePairs.add(new BasicNameValuePair("user_email", "jjdnjdn"));
                nameValuePairs.add(new BasicNameValuePair("user_password", "dcds"));
                nameValuePairs.add(new BasicNameValuePair("user_phone_number", "2343"));
                nameValuePairs.add(new BasicNameValuePair("club_member_id", "24"));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
     //For receiving response
// Creating new JSON Parser
            JSONParser jParser = new JSONParser();

            // Getting JSON from URL
            JSONObject json = jParser.getJSONFromUrl(url);
            Log.e("Data", String.valueOf(json));
            try {
     String id = json.getString(TAG_ID);
                String name = json.getString(TAG_NAME);
                String email = json.getString(TAG_EMAIL);
                Toast.makeText(getContext(), id , Toast.LENGTH_SHORT).show();
                Toast.makeText(getContext(), name , Toast.LENGTH_SHORT).show();
                Toast.makeText(getContext(), email , Toast.LENGTH_SHORT).show();
     } catch (JSONException e) {
                e.printStackTrace();
            }

        }

Logcat错误

      E/JSON Parser: Error parsing data org.json.JSONException: Value null of type org.json.JSONObject$1 cannot be converted to JSONObject
      E/Data: null
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.getString(java.lang.String)' on a null object reference

PHP代码

<?php
  print_r($_POST);
?>

获取空数组。

2 个答案:

答案 0 :(得分:1)

jParser.getJSONFromUrl(url)似乎是GET而不是POST(无论如何你还没有使用过httppost或者从jParser引用它,所以它无法确定地发布你的数据。

在ephp中,您可能还需要在回显json主体之前发送正确的Content-type标头,因为jParser可能依赖于它。

答案 1 :(得分:1)

试试这个::

App Side

private static final String TAG_ID = "status";
private static final String TAG_NAME = "code";
private static final String TAG_EMAIL = "message";


ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("user_name", "Steve"));
nameValuePairs.add(new BasicNameValuePair("user_email", "jjdnjdn"));
nameValuePairs.add(new BasicNameValuePair("user_password", "dcds"));
nameValuePairs.add(new BasicNameValuePair("user_phone_number", "2343"));
nameValuePairs.add(new BasicNameValuePair("club_member_id", "24"));

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URL);

try {

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);

if(response.getStatusLine().getStatusCode()==200){

     JSONObject jsonResponse = new JSONObject(response);

     String id = jsonResponse .getString(TAG_ID);
     String name = jsonResponse .getString(TAG_NAME);
     String email = jsonResponse .getString(TAG_EMAIL);

}

} catch (JSONException e) {

} catch (UnsupportedEncodingException e) {

} catch (IOException e) {

}

服务器端

<?php


file_put_contents(__DIR__."/request_log.txt", "Request : ".json_encode($_REQUEST));

if(!empty($_REQUEST))
{

$user_name = $_REQUEST["user_name"];
$user_email = $_REQUEST["user_email"];
$user_password = $_REQUEST["user_password"];
$user_phone_number = $_REQUEST["user_phone_number"];
$club_member_id = $_REQUEST["club_member_id"];


/*

Add your code

*/

$result = array("status" => "status_value", "code" => "code_value", "message" => "message");

file_put_contents(__DIR__."/request_log.txt", "Result : ".json_encode($result), FILE_APPEND);

echo json_encode($result);

}

?>