Showing posts with label Android JSON Parsing Example. Show all posts
Showing posts with label Android JSON Parsing Example. Show all posts

Tuesday, June 28, 2016

Android JSON parsing without Volley example

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

    <uses-sdk
        android:minSdkVersion="8" 
       android:targetSdkVersion="18" />
    
   <uses-permission android:name="android.permission.INTERNET" />
    <application 
       android:icon="@drawable/ic_launcher" 
       android:label="@string/app_name" >
        <activity
            android:label="@string/app_name" 
           android:name="com.myandroid.jsonparsing.MainActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
          <activity
            android:label="Contact"
            android:name="com.myandroid.jsonparsing.SingleContactActivity" >
        </activity>
    </application>

</manifest>


2)ServiceHandler.Java


import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class ServiceHandler {

   static String response = null;
   public final static int GET = 1;
   public final static int POST = 2;

   public ServiceHandler() {

   }

   public String makeServiceCall(String url, int method) {
      return this.makeServiceCall(url, method, null);
   }

     public String makeServiceCall(String url, int method,
         List<NameValuePair> params) {
      try {
         // http client         DefaultHttpClient httpClient = new DefaultHttpClient();
         HttpEntity httpEntity = null;
         HttpResponse httpResponse = null;
         
         // Checking http request method type         if (method == POST) {
            HttpPost httpPost = new HttpPost(url);
            // adding post params            if (params != null) {
               httpPost.setEntity(new UrlEncodedFormEntity(params));
            }

            httpResponse = httpClient.execute(httpPost);

         } else if (method == GET) {
            // appending params to url            if (params != null) {
               String paramString = URLEncodedUtils
                     .format(params, "utf-8");
               url += "?" + paramString;
            }
            HttpGet httpGet = new HttpGet(url);

            httpResponse = httpClient.execute(httpGet);

         }
         httpEntity = httpResponse.getEntity();
         response = EntityUtils.toString(httpEntity);

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

   }
}


3)MainActivity.java
import java.util.ArrayList;
import java.util.HashMap;

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

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class MainActivity extends ListActivity 
{
 private ProgressDialog pDialog;
 // URL to get contacts JSON
 private static String url = "http://api.androidhive.info/contacts/";
 // JSON Node names
 private static final String TAG_CONTACTS = "contacts";
 private static final String TAG_ID = "id";
 private static final String TAG_NAME = "name";
 private static final String TAG_EMAIL = "email";
 private static final String TAG_ADDRESS = "address";
 private static final String TAG_GENDER = "gender";
 private static final String TAG_PHONE = "phone";
 private static final String TAG_PHONE_MOBILE = "mobile";
 private static final String TAG_PHONE_HOME = "home";
 private static final String TAG_PHONE_OFFICE = "office";

 // contacts JSONArray
 JSONArray contacts = null;
 // Hashmap for ListView
 ArrayList<HashMap<String, String>> contactList;
 @Override
 public void onCreate(Bundle savedInstanceState)
        {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   contactList = new ArrayList<HashMap<String, String>>();

   ListView lv = getListView();

   // Listview on item click listener
     lv.setOnItemClickListener(new OnItemClickListener() 
              {

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

    // Starting single contact activity
    Intent in = new Intent(getApplicationContext(),
      SingleContactActivity.class);
    in.putExtra(TAG_NAME, name);
    in.putExtra(TAG_EMAIL, cost);
    in.putExtra(TAG_PHONE_MOBILE, description);
    startActivity(in);

   }
  });

  // Calling async task to get json
  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) {
   // Creating service handler class instance
   ServiceHandler sh = new ServiceHandler();

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

   Log.d("Response: ", "> " + jsonStr);

   if (jsonStr != null) {
    try {
     JSONObject jsonObj = new JSONObject(jsonStr);
     
     // Getting JSON Array node
     contacts = jsonObj.getJSONArray(TAG_CONTACTS);

     // looping through All Contacts
     for (int i = 0; i < contacts.length(); i++) {
      JSONObject c = contacts.getJSONObject(i);
      
      String id = c.getString(TAG_ID);
      String name = c.getString(TAG_NAME);
      String email = c.getString(TAG_EMAIL);
      String address = c.getString(TAG_ADDRESS);
      String gender = c.getString(TAG_GENDER);

      // Phone node is JSON Object
      JSONObject phone = c.getJSONObject(TAG_PHONE);
      String mobile = phone.getString(TAG_PHONE_MOBILE);
      String home = phone.getString(TAG_PHONE_HOME);
      String office = phone.getString(TAG_PHONE_OFFICE);

      // tmp hashmap for single contact
      HashMap<String, String> contact = new HashMap<String, String>();

      // adding each child node to HashMap key => value
      contact.put(TAG_ID, id);
      contact.put(TAG_NAME, name);
      contact.put(TAG_EMAIL, email);
      contact.put(TAG_PHONE_MOBILE, mobile);

      // adding contact to contact list
      contactList.add(contact);
     }
    } catch (JSONException e) {
     e.printStackTrace();
    }
   } else {
    Log.e("ServiceHandler", "Couldn't get any data from the url");
   }

   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[] { TAG_NAME, TAG_EMAIL,
       TAG_PHONE_MOBILE }, new int[] { R.id.name,
       R.id.email, R.id.mobile });

   setListAdapter(adapter);
  }

 }

}




4)SingleContactActivity.java

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import info.androidhive.jsonparsing.R;

public class SingleContactActivity  extends Activity {
   
   // JSON node keys   private static final String TAG_NAME = "name";
   private static final String TAG_EMAIL = "email";
   private static final String TAG_PHONE_MOBILE = "mobile";
   @Override    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_single_contact);
        
          Intent in = getIntent();
   
        String name = in.getStringExtra(TAG_NAME);
        String email = in.getStringExtra(TAG_EMAIL);
        String mobile = in.getStringExtra(TAG_PHONE_MOBILE);
        
        TextView lblName = (TextView) findViewById(R.id.name_label);
        TextView lblEmail = (TextView) findViewById(R.id.email_label);
        TextView lblMobile = (TextView) findViewById(R.id.mobile_label);
        
        lblName.setText(name);
        lblEmail.setText(email);
        lblMobile.setText(mobile);
    }
}




5)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">
    <ListView   
     android:id="@android:id/list"  
      android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>


6)activity_single_contact.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"  android:layout_width="match_parent" 
 android:layout_height="match_parent"  android:padding="10dp">
  <!-- Name Label -->  <TextView android:id="@+id/name_label"       
     android:layout_width="fill_parent"           
 android:layout_height="wrap_content"          
  android:textSize="25dip"         
   android:textStyle="bold"         
   android:paddingTop="10dip"        
    android:paddingBottom="10dip"         
   android:textColor="#43bd00"/>
  <TextView android:id="@+id/email_label"      
      android:layout_width="fill_parent"     
       android:layout_height="wrap_content"    
        android:textColor="#acacac"/>
  <TextView android:id="@+id/mobile_label"    
      android:layout_width="fill_parent"       
   android:layout_height="wrap_content"    
      android:textStyle="bold"/>
</LinearLayout>


7)list_item.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="wrap_content"
    android:orientation="vertical"
    android:padding="10dp" 
   android:paddingLeft="10dp"
    android:paddingRight="10dp" >

    <!-- Name Label -->
    <TextView     
   android:id="@+id/name"  
      android:layout_width="fill_parent"   
     android:layout_height="wrap_content"   
     android:paddingBottom="2dip"      
  android:paddingTop="6dip"      
  android:textColor="#43bd00"    
    android:textSize="16sp"     
   android:textStyle="bold" />

 <TextView 
       android:id="@+id/email"
        android:layout_width="fill_parent" 

       android:layout_height="wrap_content" 
       android:paddingBottom="2dip" 
       android:textColor="#acacac" />
  <TextView   
     android:id="@+id/mobile" 
       android:layout_width="wrap_content"  
      android:layout_height="wrap_content"  
      android:gravity="left"   
     android:text="Mobile: "   
     android:textColor="#5d5d5d" 
       android:textStyle="bold" />

</LinearLayout>