HTTP in Android

Introduction

 
This article explains HTTP in Android.
 

What is HTTP?

 
HTTP stands for HyperText Transfer Protocol. It is used for communication between the client and server. HTTP works as a request/response protocol between a client and a server. In this protocol a client requests information from the server, then the server returns a response to the client. The response contains information about the status and sometimes maybe the content.
 
HTTP provides two request methods, Get and Post.
  • Get- Requests data from the server.
  • Post- Submits data to the server.
Android has two HTTP clients, one is HttpUrlConnection and the other is HttpClient. An HTTP client is used when we want to send data to and receive data from the internet. The Get and Post methods are the basic methods to exchange information with the server. Suppose I want to send some text data to the server. So the first step is to create a default HTTP client to send the data.
 
HttpClient httpClient=new DefaultHttpClient();
 
After creating the HttpCLient we will instantiate a class to handle the post request and a URL as a parameter.
HttpPost httpPost=new HttpPost(url);
 
URL is the URL that you want to invoke to send data. Now make your list that contains your data that you want to send. Then set it inside our post request to be sent so that it can be sent.
 
httpPost.setEntity(new UrlEncodedFormEntity(your list object);
 
URL encoding is used to encode the parameter that you want to send. At last, we execute our request through the instance of the HTTP client and receive the response.
 
HttpResponse httpResponse=httpClient.execute(url);
 
For reading the response we can obtain an input stream and consume it reading data in this way.
 
InputStream inputStream=httpResponse.getEntity().getContent();
  • getEntity(): gets the message entity of this response.
  • getContent(): creates the inputStream of the entity.

What a Stream?

 
A Stream is just like a stream of water that consists of a sequence of data (bytes).
 
InputStream
 
An Input Steam in Java reads data from a source; it may be a file, array and so on. The input stream is a class in Java.
 
This is how to write to Get and Post data: 
  1. HttpClient httpClient=new DefaultHttpClient();    
  2. HttpPost httpPost=new HttpPost(url);    
  3. httpPost.setEntity(new UrlEncodedFormEntity(your list object);    
  4. HttpResponse httpResponse=httpClient.execute(url);    
  5. InputStream inputStream=httpResponse.getEntity().getContent();    
  6. BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));    
  7.     
  8. StringBuilder stringBuilder=new StringBuilder();    
  9. String line=null;    
  10. while(line=reader.readLine())    
  11. {    
  12.        stringBuilder.append(line+"\n");    
  13.           
  14. }    
  15. inputStream.close();  
Step 1
 
Create an XML file with the following:
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.    
  6.     <TextView  
  7.         android:id="@+id/txtView"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_alignParentTop="true"  
  11.         android:layout_centerHorizontal="true"  
  12.         android:layout_marginTop="20dp"  
  13.         android:text="Enter Something Below:"  
  14.         android:textAppearance="?android:attr/textAppearanceLarge" />  
  15.    
  16.     <EditText  
  17.         android:id="@+id/edtText1"  
  18.         android:layout_width="wrap_content"  
  19.         android:layout_height="wrap_content"  
  20.         android:layout_below="@+id/textView1"  
  21.         android:layout_centerHorizontal="true"  
  22.         android:layout_marginTop="30dp"  
  23.         android:ems="10"  
  24.         android:hint=""  
  25.         >  
  26.    
  27.         <requestFocus />  
  28.     </EditText>  
  29.    
  30.     <ProgressBar  
  31.         android:id="@+id/progressBar1"  
  32.         style="?android:attr/progressBarStyleLarge"  
  33.         android:layout_width="wrap_content"  
  34.         android:layout_height="wrap_content"  
  35.         android:layout_below="@+id/editText1"  
  36.         android:layout_centerHorizontal="true"  
  37.         android:layout_marginTop="24dp" />  
  38.    
  39.     <Button  
  40.         android:id="@+id/btn_send"  
  41.         android:layout_width="wrap_content"  
  42.         android:layout_height="wrap_content"  
  43.         android:layout_alignLeft="@+id/textView1"  
  44.         android:layout_alignRight="@+id/editText1"  
  45.         android:layout_below="@+id/progressBar1"  
  46.         android:layout_marginTop="24dp"  
  47.         android:text="Submit" />  
  48.    
  49. </RelativeLayout>  
Step 2
 
Create a Java class file with the following:  
  1. package com.example.locationapp;    
  2.      
  3. import java.io.IOException;    
  4. import java.util.ArrayList;    
  5. import java.util.List;    
  6. import org.apache.http.HttpResponse;    
  7. import org.apache.http.NameValuePair;    
  8. import org.apache.http.client.ClientProtocolException;    
  9. import org.apache.http.client.HttpClient;    
  10. import org.apache.http.client.entity.UrlEncodedFormEntity;    
  11. import org.apache.http.client.methods.HttpPost;    
  12. import org.apache.http.impl.client.DefaultHttpClient;    
  13. import org.apache.http.message.BasicNameValuePair;    
  14. import android.app.Activity;    
  15. import android.opengl.Visibility;    
  16. import android.os.AsyncTask;    
  17. import android.os.Bundle;    
  18. import android.view.Menu;    
  19. import android.view.View;    
  20. import android.view.View.OnClickListener;    
  21. import android.widget.Button;    
  22. import android.widget.EditText;    
  23. import android.widget.ProgressBar;    
  24. import android.widget.TextView;    
  25. import android.widget.Toast;    
  26.      
  27. public class MainActivity extends Activity implements OnClickListener{    
  28.      
  29.        private EditText edtText;    
  30.        private Button btn_send;    
  31.        private ProgressBar progressbar;    
  32.        @Override    
  33.        public void onCreate(Bundle savedInstanceState) {    
  34.               super.onCreate(savedInstanceState);    
  35.               setContentView(R.layout.activity_main);    
  36.               edtText=(EditText)findViewById(R.id.edtText1);    
  37.               btn_send=(Button)findViewById(R.id.btn_send);    
  38.               progressbar=(ProgressBar)findViewById(R.id.progressBar1);    
  39.               progressbar.setVisibility(View.GONE);    
  40.      
  41.               btn_send.setOnClickListener(new OnClickListener() {    
  42.      
  43.                      @Override    
  44.                      public void onClick(View arg0) {    
  45.                            // TODO Auto-generated method stub    
  46.                                                        // TODO Auto-generated method stub    
  47.                                          if(edtText.getText().toString().length()<1){    
  48.      
  49.                                                 // out of range    
  50.                                          }else{    
  51.                                                 progressbar.setVisibility(View.VISIBLE);    
  52.                                                 new NewAsyncTask().execute(edtText.getText().toString());                 
  53.                                          }    
  54.                      }    
  55.               });       
  56.        }    
  57.      
  58.        @Override    
  59.        public boolean onCreateOptionsMenu(Menu menu) {    
  60.               getMenuInflater().inflate(R.menu.main, menu);    
  61.               return true;    
  62.        }    
  63.      
  64.        private class NewAsyncTask extends AsyncTask<String, Integer, Double>{    
  65.      
  66.               @Override    
  67.               protected Double doInBackground(String... params) {    
  68.                      // TODO Auto-generated method stub    
  69.                      Datapost(params[0]);    
  70.                      return null;    
  71.               }    
  72.      
  73.               protected void onPostExecute(Double result){    
  74.                      progressbar.setVisibility(View.GONE);    
  75.                      Toast.makeText(getApplicationContext(), "command sent", Toast.LENGTH_LONG).show();    
  76.               }    
  77.               protected void onProgressUpdate(Integer... progress){    
  78.                      progressbar.setProgress(progress[0]);    
  79.               }    
  80.      
  81.               public void Datapost(String value) {    
  82.                      // Create a new HttpClient and Post Header    
  83.                      HttpClient httpclient = new DefaultHttpClient();    
  84.                      HttpPost httppost = new HttpPost("http://somewebsite.com/receiver.php");    
  85.      
  86.                      try {    
  87.                            // Add your data    
  88.                            List<NameValuePair> ValuePairs = new ArrayList<NameValuePair>();    
  89.                            ValuePairs.add(new BasicNameValuePair("myHttpData", value));    
  90.                            httppost.setEntity(new UrlEncodedFormEntity(ValuePairs));    
  91.      
  92.                            // Execute HTTP Post Request    
  93.                            HttpResponse res = httpclient.execute(httppost);    
  94.      
  95.                      } catch (ClientProtocolException e) {    
  96.                            // TODO Auto-generated catch block    
  97.                      } catch (IOException e) {    
  98.                            // TODO Auto-generated catch block    
  99.                      }    
  100.               }    
  101.        }    
  102.        @Override    
  103.        public void onClick(View v) {    
  104.               // TODO Auto-generated method stub    
  105.      
  106.        }    
  107. }   
 
Step 3
 
Give internet permission to the Android Manifest.xml file as in the following:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.example.locationapp"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.    
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="18" />       
  10.      <uses-permission android:name="android.permission.INTERNET" />  
  11.     <application  
  12.         android:allowBackup="true"  
  13.         android:icon="@drawable/ic_launcher"  
  14.         android:label="@string/app_name"  
  15.         android:theme="@style/AppTheme" >  
  16.         <activity  
  17.             android:name="com.example.locationapp.MainActivity"  
  18.             android:label="@string/app_name" >  
  19.             <intent-filter>  
  20.                 <action android:name="android.intent.action.MAIN" />  
  21.                 <category android:name="android.intent.category.LAUNCHER" />  
  22.             </intent-filter>  
  23.         </activity>  
  24.     </application>  
  25. </manifest>  
Step 4
 
Enter the string you want to send:
 
http1
 
Step 5
 
Click on the button.
 
http2


Similar Articles