1

I've set up a php script to create json here, but when i try to display the JSONArray i got some error like this on my Android Monitor..

Value (html)(body)(script of type java.lang.String cannot be converted to JSONArray

can someone tell me how to fix it?

MainActivity.java

package flix.yudi.okhttp1;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {

    private String TAG = MainActivity.class.getSimpleName();

    private ProgressDialog pDialog;
    private ListView lv;

    // URL to get contacts JSON
    private static String url = "http://zxccvvv.cuccfree.com/send_data.php";

    ArrayList<HashMap<String, String>> contactList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        contactList = new ArrayList<>();

        lv = (ListView) findViewById(R.id.list);

        new GetContacts().execute();
    }

    /**
     * Async task class to get json by making HTTP call
     */
    private class GetContacts extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(url);

            Log.e(TAG, "Response from url: " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONArray jsonObj = new JSONArray(jsonStr);

                    // Getting JSON Array node
                    JSONArray pertanyaan = jsonObj.getJSONArray("pertanyaan");

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

                        String id = c.getString("id");
                        String ask = c.getString("ask");

                        // tmp hash map for single contact
                        HashMap<String, String> pertanyaans = new HashMap<>();

                        // adding each child node to HashMap key => value
                        pertanyaans.put("id", id);
                        pertanyaans.put("ask", ask);

                        // adding contact to contact list
                        contactList.add(pertanyaans);
                    }
                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });

                }
            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });

            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(
                    MainActivity.this, contactList,
                    R.layout.list_item, new String[]{"ask"}, new int[]{R.id.ask});

            lv.setAdapter(adapter);
        }

    }
}

HttpHandler.java

package flix.yudi.okhttp1;

import android.util.Log;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

public class HttpHandler {

    private static final String TAG = HttpHandler.class.getSimpleName();

    public HttpHandler() {
    }

    public String makeServiceCall(String reqUrl) {
        String response = null;
        try {
            URL url = new URL(reqUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            // read the response
            InputStream in = new BufferedInputStream(conn.getInputStream());
            response = convertStreamToString(in);
        } catch (MalformedURLException e) {
            Log.e(TAG, "MalformedURLException: " + e.getMessage());
        } catch (ProtocolException e) {
            Log.e(TAG, "ProtocolException: " + e.getMessage());
        } catch (IOException e) {
            Log.e(TAG, "IOException: " + e.getMessage());
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.getMessage());
        }
        return response;
    }

    private String convertStreamToString(InputStream is) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line).append('\n');
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
}

I got the reference code from here

any idea/ another reference method to solve?

EDIT

send_data.php
<?php
include 'dbconfig.php';
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$sql = "SELECT id, ask FROM pertanyaan";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    // output data of each row
    while($row[] = $result->fetch_assoc()) {
       $json = json_encode($row);

    }
} else {
    echo "0 results";
}
mysql_close($dbname);
echo $json;
?>

2 Answers 2

2

you are trying to get a jsonarray from jsonObj with key pertanyaan which in-fact is a string value so just traverse through array while fetching the json object using indexes

 JSONArray jsonObj = new JSONArray(jsonStr);

                    // Getting JSON Array node
                    //JSONArray pertanyaan = jsonObj.getJSONArray("pertanyaan"); problem

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

                    String id = c.getString("id");
                    String ask = c.getString("ask");

                    HashMap<String, String> pertanyaans = new HashMap<>();

                    pertanyaans.put("id", id);
                    pertanyaans.put("ask", ask);

                    contactList.add(pertanyaans);
                }

Note : There is no such jasonarray with key pertanyaan in your response

PHP update : Use

echo json_encode($json);
Sign up to request clarification or add additional context in comments.

9 Comments

should i deleted my > JSONArray pertanyaan = jsonObj.getJSONArray("pertanyaan"); sir?
@Flix yeah your don't need it , and use jsonObj at the place of pertanyaan as show in my post
still getting same error sir, should i declare my php code to create JSON?
@Flix yeah , it should be in json format so in your php the response should be sent as echo json_encode(your_response_string);
i've add my send_data.php above,, what do you think sir? i did something wrong?
|
1

According to your service, while Response received you will get JSONArray like this [{"id":"1","ask":"pertanyaan ke 1"},{"id":"2","ask":"pertanyaan ke 2"},{"id":"3","ask":"pertanyaan ke 3"},{"id":"4","ask":"pertanyaan ke 4"},{"id":"5","ask":"pertanyaan ke 5"}]

you just need to store this response in JSONArray

JSONArray jsonArray = new JSONArray();
jsonArray = (response);

now you have respons in your jsonArray so you can opt out value from it. here is the sample code snippet

    for (int i = 0; i < jsonArray.length(); i++) {
        try {
            String id = jsonArray.getJSONObject(i).getString("id");
            String ask = jsonArray.getJSONObject(i).getString("ask");
            Log.i("TAG", "id "+ id + " ask "+ ask);
            //you can set value to text view here
            textview.settext(id + " "+ ask);
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

2 Comments

i've tried ur code above, but when i type "response" it's getting error and tell me to create new class called response, should i do that?
you need to replace response with your correct response, what you are getting fro server

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.