giozh
giozh

Reputation: 10068

JSON ojbect php response NullPointerException

i'm new using php and JSON. I'm writing an android app for call a php function that make a insert on a database. This is the php code for insert data:

<?php
$response = array();

// check for required fields
if ( isset($_POST['username']) && isset($_POST['password']) ) {

    $username = $_POST['username'];
    $password = $_POST['password'];

    // include db connect class
    require_once __DIR__ . '/db_connect.php';

    // connecting to db
    $db = new DB_CONNECT();

    // mysql inserting a new row
    $result = mysql_query("INSERT INTO users(username, password) VALUES('$username', '$password')");

    // check if row inserted or not
    if ($result) {
        // successfully inserted into database
        $response["success"] = 1;
        $response["message"] = "User successfully added.";

        // echoing JSON response
        echo json_encode($response);
    } else {
        // failed to insert row
        $response["success"] = 0;
        $response["message"] = "Oops! An error occurred.";

        // echoing JSON response
        echo json_encode($response);
    }
} else {
    // required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);
}
?>

this is my inner AsyncTask doInBackGround code:

protected Void doInBackground(Void... args) {


        JSONParser jsonParser = new JSONParser();
        // create parameters list
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("username", username));
        params.add(new BasicNameValuePair("password", password));
        // get JSON Object by using POST method
        JSONObject json = jsonParser.makeHttpRequest(register_url, "POST",
                params);
        try {
            int flag = json.getInt(TAG_SUCCESS);
            if (flag == 1) {

            } else {

            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

and this is JSONParser object implementation:

public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

public JSONParser() {
};

// function get json from url by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
        List<NameValuePair> params) {

    // Making HTTP request
    try {

        // check for request method
        if (method == "POST") {
            // request method is POST
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

        } else if (method == "GET") {
            // request method is GET
            DefaultHttpClient httpClient = new DefaultHttpClient();
            String paramString = URLEncodedUtils.format(params, "utf-8");
            url += "?" + paramString;
            HttpGet httpGet = new HttpGet(url);

            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        }

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}
}

when i run my app and i try to execute json code, i've thi error http://nopaste.info/d7de67983a.html

The NullPointerException is on AsyncTask and line 137 is:

int flag = json.getInt(TAG_SUCCESS);

what's wrong?

Upvotes: 0

Views: 468

Answers (3)

deep55
deep55

Reputation: 71

Try to display your page in a web browser and send data through the url with GET method. Look what the page return and debug this ;)

You can check if your json is valid here : jsonlint.com

Upvotes: 1

mehmetseckin
mehmetseckin

Reputation: 3107

It says that your json contains a "<br" string.

I think your PHP response doesn't provide a valid JSON string, probably a PHP error.

Try logging the response you got from your PHP script by

Log.i("PHP Response", json);

Upvotes: 0

botenvouwer
botenvouwer

Reputation: 4432

Maby its failing to parse JSON because PHP is parsing A JSON array INSTEAD of a JSON object. To force a JSON object use: json_encode($array, JSON_FORCE_OBJECT)

I have no idea how the android code works, but you can try to first send (comment your php code and send static JSON object) and parse a JSON object. Learn how to debug!

Upvotes: 0

Related Questions