There are many ways to handle JSON data on android. Here is my way to do that.
In this tutorial, I am going to get external JSON data with some Http post request and response.
First, let's create the class that will handle the incoming and outgoing data.
In this tutorial, I am going to get external JSON data with some Http post request and response.
First, let's create the class that will handle the incoming and outgoing data.
public class HttpUtils { private static final String URL = "http://path/to/php/script.php"; public static String doRequest(String username, String password) { HttpClient client = new DefaultHttpClient(); HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); JSONObject jsonObject = new JSONObject(); HttpPost post; HttpResponse response; String responseStr = "[{}]"; try { post = new HttpPost(URL); Log.i("Http", "Requesting " + URL); //Puting the username and password as JSON data jsonObject.put("username", username); jsonObject.put("password", password); StringEntity se = new StringEntity("JSON=" + jsonObject.toString()); se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,"application/x-www-form-urlencoded")); post.setEntity(se); Log.i("Http", "Sending :" + slurp(post.getEntity().getContent())); response = client.execute(post); // Checking response if (response.getStatusLine().getStatusCode() == 200) { // Get the data in the entity InputStream in = response.getEntity().getContent(); responseStr = slurp(in); Log.i("Http", "Getting :" + responseStr); } else { throw new HttpException("HttpMethod Returned Status Code: " + response.getStatusLine().getStatusCode() + " when attempting: " + URL); } } catch (Exception e) { Log.e("Http", e.getMessage(), e.fillInStackTrace()); } return responseStr; } /** * Convert an InputStream to String * * @param in the InputStream to be converted to String * @return the result string * @throws IOException */ private static String slurp(InputStream in) throws IOException { StringBuffer out = new StringBuffer(); byte[] b = new byte[4096]; for (int n; (n = in.read(b)) != -1;) { out.append(new String(b, 0, n)); } return out.toString(); } }As you can see, we used a JSONObject to post some data to our php script witch look like this :
if (isset($_POST['JSON'])) { header('Content-Type: application/json; charset=iso-8859-1'); $data = json_decode($_POST['JSON'], true); $username = $data['username']; $password = $data['password']; if ($username == 'ElWardi' && $password == 'json') { $response = array( array('success' => true), array('name' => 'PFA', 'description' => 'PFA test'), array('name' => 'PFA1', 'description' => 'PFA1 test'), array('name' => 'PFA2', 'description' => 'PFA2 test'), array('name' => 'PFA3', 'description' => 'PFA3 test'), array('name' => 'PFA4', 'description' => 'PFA4 test') ); } else { $response = array( array('success' => false) ); } print_r(json_encode($response)); }[Update] : The php script will encode an array of data and send it back to the android application. The encoded data will look like this :
[{"success":true}, {"name":"PFA","description":"PFA test"}, {"name":"PFA1","description":"PFA1 test"}, {"name":"PFA2","description":"PFA2 test"}, {"name":"PFA3","description":"PFA3 test"}, {"name":"PFA4","description":"PFA4 test"}]Now, all the rest to do is call the doRequest method then parse the response data. I made that in the MainActivity.java :
public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String response = HttpUtils.doRequest("ElWardi", "json"); JSONArray json; try { /* * Build the JSAONArray from a string */ json = new JSONArray(response); Log.i("JSON", "Number of data fetched : " + json.length()); // data count /* * get the data from the JSONArray if the authentifcation data are valid */ if (json.optJSONObject(0).getBoolean("success")) { for (int i = 1; i < json.length(); i++) { Log.i("MyData", "Name : " + json.optJSONObject(i).getString("name") + "Description : " + json.optJSONObject(i).getString("description")); } }else Log.e("MyData", "Some entered data (username or password) are invalid"); } catch (JSONException e) { Log.e("JSON", e.getMessage(), e.fillInStackTrace()); } } }You can see the results on the LogCat or any other debugging tool you use.
Well, I guess this will be all for my first blog here, I hope you will find it quite useful :).
Feel Free to leave your comments :)
the simply answer is : this is great
ReplyDelete