Mr Robot
Mr Robot

Reputation: 1747

HTTP POST on Android to PHP throws NullPointer Error

I want to make a simple HTTPRequest to a php script for a user registration with some parameters(name,email,password, etc). I have tried many tutorials from internet but nothing works for me. HTTP POST throws NullpointerException . in backend also it shows null.

My code is :

        //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 Error

      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 code

<?php
  print_r($_POST);
?>

getting null array.

Upvotes: 1

Views: 134

Answers (2)

Ijas Ahamed N
Ijas Ahamed N

Reputation: 6110

Try this ::

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) {

}

Server Side

<?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);

}

?>

Upvotes: 1

Gavriel
Gavriel

Reputation: 19237

jParser.getJSONFromUrl(url) seems to GET instead of POST (and anyway you haven't use httppost or referenced it anyhow from jParser, so it couldn't POST your data for sure.

In th ephp you might also need to send a correct Content-type header before you echo the json body, as jParser might depend on it.

Upvotes: 1

Related Questions