Wednesday, August 19, 2015

Android Json Apache Http Client


.
Android JSON Apache HTTP Client

1) Create New Project

Using Empty Activity template.

2) Edit Layout

2.1) res/layout/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>

2.2) res/layout/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"
       android:text="Name"/>
   <!-- Email label -->
   <TextView
       android:id="@+id/email"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:paddingBottom="2dip"
       android:textColor="#acacac"
       android:text="Email"/>
   <!-- Mobile number label -->
   <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>

3) Edit Java Files

3.1) MainActivity.java

package com.notarazi.myapplication;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.SimpleAdapter;
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 ProgressDialog pDialog;
   // URL to get contacts JSON
   private 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 new ArrayList<HashMap<String, String>>();
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       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
            * */
           ListView mListView = (ListView) findViewById(R.id.list);
           SimpleAdapter adapter;
           adapter = new SimpleAdapter(MainActivity.thiscontactList,
                   R.layout.list_itemnew String[] { TAG_NAMETAG_EMAIL,
                   TAG_PHONE_MOBILE }, new int[] { R.id.name,
                   R.id.email, R.id.mobile });
           mListView.setAdapter(adapter);
       }
   }
}
Refer the variable declaration below...
   ArrayList<HashMap<String, String>> contactList new ArrayList<HashMap<String, String>>();
If you don’t initialize the variable e.g.…
   ArrayList<HashMap<String, String>> contactList;
...you will get the following error…
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference

3.2) ServiceHandler.java

package com.notarazi.myapplication;
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;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
public class ServiceHandler {
   static String response null;
   public final static int GET 1;
   public final static int POST 2;
   public ServiceHandler() {
   }
   /**
    * Making service call
    * @url - url to make request
    * @method - http request method
    * */
   public String makeServiceCall(String url, int method) {
       return this.makeServiceCall(url, method, null);
   }
   /**
    * Making service call
    * @url - url to make request
    * @method - http request method
    * @params - http request params
    * */
   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;
   }
}

4) Edit Application Configuration

4.1) Android Manifest

Include permission to use Internet.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.notarazi.myapplication" >
   <uses-permission android:name="android.permission.INTERNET" />
   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme" >
       <activity android:name=".MainActivity" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

4.2) Build.Gradle (Module:app)

apply plugin'com.android.application'
android {
   compileSdkVersion 23
   buildToolsVersion "23.0.2"
   useLibrary 'org.apache.http.legacy'
   defaultConfig {
       applicationId "com.notarazi.myapplication"
       minSdkVersion 14
       targetSdkVersion 23
       versionCode 1
       versionName "1.0"
   }
   buildTypes {
       release {
           minifyEnabled false
           proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
       }
   }
}
dependencies {
   compile fileTree(dir'libs'include: ['*.jar'])
   testCompile 'junit:junit:4.12'
   compile 'com.android.support:appcompat-v7:23.1.1'
}
OUTCOME.

DOWNLOAD

REFERENCES


.

6 comments:

  1. It is amazing and wonderful to visit your site.Thanks for sharing this information,this is useful to me...
    Devops Training courses
    python Training in chennai
    Devops Training in Bangalore

    ReplyDelete
  2. I would really like to read some personal experiences like the way, you've explained through the above article. I'm glad for your achievements and would probably like to see much more in the near future. Thanks for share.
    Data Science Training in Chennai
    Data Science training in kalyan nagar
    Data science training in Bangalore
    Data Science training in marathahalli
    Data Science interview questions and answers
    Data science training in bangalore

    ReplyDelete
  3. After reading this web site I am very satisfied simply because this site is providing comprehensive knowledge for you to audience.
    Thank you to the perform as well as discuss anything incredibly important in my opinion. We loose time waiting for your next article writing in addition to I beg one to get back to pay a visit to our website in



    selenium training in Bangalore
    selenium training in Marathahalli
    selenium training in Btm layout
    selenium training in Jaya nagar
    selenium training in Electronic city
    selenium training in Kalyan nagar



    ReplyDelete
  4. I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well. In fact your creative writing abilities has inspired me to start my own BlogEngine blog now. Really the blogging is spreading its wings rapidly. Your write up is a fine example of it.
    Python Online training
    python Course institute in Chennai
    Python Course institute in Bangalore

    ReplyDelete