Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

Hi guys so my problem is ive developed an app for android that uses json parser to get data from my php webservice and display it into a listview, but when i run the app it shows this:

LogCat:

E/JSON Parser(1999): Error parsing data [Value Array of type java.lang.String cannot be converted to JSONObject] Array
04-02 13:46:46.982: E/JSON Parser(1079): (
04-02 13:46:46.982: E/JSON Parser(1079):     [id] => 1
04-02 13:46:46.982: E/JSON Parser(1079):     [dt_ini_camp] => 2012-12-22
04-02 13:46:46.982: E/JSON Parser(1079):     [dt_fim_camp] => 2012-12-24
04-02 13:46:46.982: E/JSON Parser(1079):     [descricao] => Apoios comunit?rios
04-02 13:46:46.982: E/JSON Parser(1079):     [qtd] => 4762.000
04-02 13:46:46.982: E/JSON Parser(1079): )
04-02 13:46:46.982: E/JSON Parser(1079): Array
04-02 13:46:46.982: E/JSON Parser(1079): (
04-02 13:46:46.982: E/JSON Parser(1079):     [id] => 2
04-02 13:46:46.982: E/JSON Parser(1079):     [dt_ini_camp] => 2012-10-08
04-02 13:46:46.982: E/JSON Parser(1079):     [dt_fim_camp] => 2012-10-10
04-02 13:46:46.982: E/JSON Parser(1079):     [descricao] => Outras Campanhas
04-02 13:46:46.982: E/JSON Parser(1079):     [qtd] => 3560.000
04-02 13:46:46.982: E/JSON Parser(1079): )

My code:

Activity with list view and invokes json parser:

public class AllProductsActivity extends ListActivity {

// Progress Dialog
private ProgressDialog pDialog;

// Creating JSON Parser object
JSONParser jParser = new JSONParser();

ArrayList<HashMap<String, String>> productsList;

// url to get all products list
private static String url_all_products = "http://10.0.2.2/webprojecto4/index_pesagem.php";

// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCTS = "cab_doc";
private static final String TAG_ID = "id";
private static final String TAG_NAME = "descricao";
private static final String TAG_DATA = "dt_ini_camp";
private static final String TAG_DATA2 = "dt_fim_camp";
private static final String TAG_QTD = "qtd";

// products JSONArray
JSONArray products = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.all_products);

    // Hashmap for ListView
    productsList = new ArrayList<HashMap<String, String>>();

    // Loading products in Background Thread
    new LoadAllProducts().execute();

    // Get listview
    ListView lv = getListView();

    // on seleting single product
    // launching Edit Product Screen
    // on seleting single product
    // launching Edit Product Screen
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem
            String id2 = ((TextView) view.findViewById(R.id.id)).getText()
                    .toString();

            // Starting new intent
            Intent in = new Intent(getApplicationContext(),
                    EditProductActivity.class);
            // sending pid to next activity
            in.putExtra(TAG_ID, id);

            // starting new activity and expecting some response back
            startActivityForResult(in, 100);
        }
    });


}

// Response from Edit Product Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // if result code 100
    if (resultCode == 100) {
        // if result code 100 is received
        // means user edited/deleted product
        // reload this screen again
        Intent intent = getIntent();
        finish();
        startActivity(intent);
    }

}

/**
 * Background Async Task to Load all product by making HTTP Request
 * */
class LoadAllProducts extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(AllProductsActivity.this);
        pDialog.setMessage("Loading products. Please wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    /**
     * getting All products from url
     * */
    protected String doInBackground(String... args) {
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        // getting JSON string from URL
        JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);

        // Check your log cat for JSON reponse
        Log.d("All Products: ", json.toString());

        try {
            // Checking for SUCCESS TAG
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {
                // products found
                // Getting Array of Products
                products = json.getJSONArray(TAG_PRODUCTS);


                // looping through All Products
                for (int i = 0; i < products.length(); i++) {
                    JSONObject c = products.getJSONObject(i);

                    // Storing each json item in variable
                    String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_NAME);
                    String data = c.getString(TAG_DATA);
                    String data2 = c.getString(TAG_DATA2);
                    String qtd = c.getString(TAG_QTD);

                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    map.put(TAG_ID, id);
                    map.put(TAG_NAME, name);
                    map.put(TAG_DATA, data);
                    map.put(TAG_DATA2, data2);
                    map.put(TAG_QTD, qtd);
                    // adding HashList to ArrayList
                    productsList.add(map);
                }
            } else {
                // no products found
                // Launch Add New product Activity
                Intent i = new Intent(getApplicationContext(),
                        NewProductActivity.class);
                // Closing all previous activities
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog after getting all products
        pDialog.dismiss();
        // updating UI from Background Thread
        runOnUiThread(new Runnable() {
            public void run() {
                /**
                 * Updating parsed JSON data into ListView
                 * */
                ListAdapter adapter = new SimpleAdapter(
                        AllProductsActivity.this, productsList,
                        R.layout.list_item, new String[] { TAG_ID,
                                TAG_NAME, TAG_DATA, TAG_DATA2, TAG_QTD},
                        new int[] { R.id.id, R.id.descricao, R.id.data, R.id.data2, R.id.qtd });
                // updating listview
                setListAdapter(adapter);
            }
        });

    }

}
}

Json Parser in this i only changed this line BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8); instead of utf-8 it was iso-8859-1 ive searched for this error and based on answers i found it said it would be better utf-8 but it didnt fixed the problem

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
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, "utf-8"), 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.getMessage()+"] "+json);
         }

    // return JSON String

    return jObj;

}
}

And my php service:

<?php

/*
* Following code will list all the products
*/

// array for JSON response
$response = array();

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

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

// get all products from products table
$result = mysql_query("select cd.id, cd.dt_ini_camp, cd.dt_fim_camp, cd.descricao, + (select     sum(quantidade) from lin_doc where id_cab_doc = cd.id) as qtd from cab_doc cd where cd.id_tipo_doc =   1") or die(mysql_error());


 // check for empty result
if (mysql_num_rows($result) > 0) {
// looping through all results
// products node

$response["cab_doc"] = array();

while ($row = mysql_fetch_array($result)) {

    // temp user array
    $product = array();
    $product["id"] = $row["id"];
    $product["dt_ini_camp"] = $row["dt_ini_camp"];
    $product["dt_fim_camp"] = $row["dt_fim_camp"];
    $product["descricao"] = $row["descricao"];
    $product["qtd"] = $row["qtd"];



    // push single product into final response array
  array_push($response["cab_doc"], $product);

  print_r($product);

}
// success
$response["success"] = 1;

// echoing JSON response
echo json_encode($response);
} else {
// no products found
$response["success"] = 0;
$response["message"] = "No products found";

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

Please guys i really need help i dont find the problem, the problem i find lol i dont find the answer to my problem xD

share|improve this question

1 Answer 1

You've a print_r() in your PHP code, which makes your output not JSON.

share|improve this answer
    
ive puted that print_r() because without it my php when i call it in browser it shows me a blanck page. And with it it shows me the results i want to display in my list view. I took him off and now the error is Error parsing data [End of input at character 0 of ] –  user3121133 Apr 2 '14 at 15:02

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.