Sunday, November 23, 2014

How to use JSON to parse data into android application using Http Client Get

MainActivity.java


package com.test.jsonparser;

import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.jitesh.androidjsonparser.R;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends ListActivity {
 private Context context;
 private static String url = "http://docs.blackberry.com/sampledata.json";

 private static final String VTYPE = "Type";
 private static final String VCOLOR = "Color";
 private static final String FUEL = "Fuel";
 private static final String TREAD = "Tread";
 
 ArrayList<HashMap<String, String>> jsonlist = new ArrayList<HashMap<String, String>>();
 
 ListView lv ;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  new ProgressTask(MainActivity.this).execute();
 }

 private class ProgressTask extends AsyncTask<String, Void, Boolean> {
  private ProgressDialog dialog;

  private ListActivity activity;

  // private List<Message> messages;
  public ProgressTask(ListActivity activity) {
   this.activity = activity;
   context = activity;
   dialog = new ProgressDialog(context);
  }

  private Context context;

  protected void onPreExecute() {
   this.dialog.setMessage("Progress start");
   this.dialog.show();
  }

  @Override
  protected void onPostExecute(final Boolean success) {
   if (dialog.isShowing()) {
    dialog.dismiss();
   }
   ListAdapter adapter = new SimpleAdapter(context, jsonlist,
     R.layout.list_item, new String[] { VTYPE, VCOLOR,
       FUEL, TREAD }, new int[] {
       R.id.vehicleType, R.id.vehicleColor, R.id.fuel,
       R.id.treadType });

   setListAdapter(adapter);

   // select single ListView item
    lv = getListView();
  }

  protected Boolean doInBackground(final String... args) {

   JSONParser jParser = new JSONParser();

   // get JSON data from URL
   JSONArray json = jParser.getJSONFromUrl(url);

   for (int i = 0; i < json.length(); i++) {

    try {
     JSONObject c = json.getJSONObject(i);
     String vtype = c.getString(VTYPE);

     String vcolor = c.getString(VCOLOR);
     String vfuel = c.getString(FUEL);
     String vtread = c.getString(TREAD);

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

     // Add child node to HashMap key & value
     map.put(VTYPE, vtype);
     map.put(VCOLOR, vcolor);
     map.put(FUEL, vfuel);
     map.put(TREAD, vtread);
     jsonlist.add(map);
    }
    catch (JSONException e) {
     e.printStackTrace();
    }
   }
   return null;
  }
 }
}
 

JSONParser.java
 
package com.test.jsonparser;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;

import android.util.Log;

public class JSONParser {

 static InputStream iStream = null;
 static JSONArray jarray = null;
 static String json = "";

 public JSONParser() {
 }

 public JSONArray getJSONFromUrl(String url) {

     StringBuilder builder = new StringBuilder();
      HttpClient client = new DefaultHttpClient();
      HttpGet httpGet = new HttpGet(url);
      try {
        HttpResponse response = client.execute(httpGet);
        StatusLine statusLine = response.getStatusLine();
        int statusCode = statusLine.getStatusCode();
        if (statusCode == 200) {
          HttpEntity entity = response.getEntity();
          InputStream content = entity.getContent();
          BufferedReader reader = new BufferedReader(new InputStreamReader(content));
          String line;
          while ((line = reader.readLine()) != null) {
            builder.append(line);
          }
        } else {
          Log.e("==>", "Failed to download file");
        }
      } catch (ClientProtocolException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
    
  // Parse String to JSON object
  try {
   jarray = new JSONArray( builder.toString());
  } catch (JSONException e) {
   Log.e("JSON Parser", "Error parsing data " + e.toString());
  }

  // return JSON Object
  return jarray;

 }
}


AndroidManifest.xml
 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jitesh.androidjsonparser"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />
   
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.test.jsonparser.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
    </application>

</manifest>


string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Vehicle Information</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>

</resources>

 
activity_main.xml
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
 <!-- Main ListView 
   Always give id value as list(@android:id/list)
 -->
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

No comments: