Hi… Android amigos…
Today we are going to communicate with a server page but insecure way. Why I’m saying “insecure” is we are using HTTP GET method for the communication. All the values that user sends to the server, embedded with the URL that we send as the request, where a third party can easily watch it. If I say it more technical way, by using the HTTP GET method, we are sending user details in the header part of the request not in the body.
But there are places we only need a HTTP GET method. Also there is a solution for the problem that others sneaking around our data packets we send as request to the server. That is using HTTP POST which is going to be my next post
As usual, my interfaces are so simple. Lets begin with the interfaces that you are going to see at the end of the implementation of this HTTP GET project. Figure 1 is the one and only UI we have in our project.
After user provides a username and a password and click the “Send GET Req” button, it start to communicate with the server. What we are doing in background is, getting the user inputs and embed them in to a URL and send a server request. If the relevant server page able to catch our parameters that we send, our target is complete. That means we have successfully communicate with a server page by using HTTP GET method.
Additionally what I have done here is, passing two parameters that contains the values for username and password. If the server page we are trying to communicate, able to read those parameters and the content values it carries, it will send the response according to that.
First I will show you the JAVA code I have written for this Android project.
package com.anuja.httpget;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
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 android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MyHttpGetProjectActivity extends Activity implements OnClickListener {
private EditText usernameEditText;
private EditText passwordEditText;
private Button sendGetReqButton;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
usernameEditText = (EditText) findViewById(R.id.main_username_editText);
passwordEditText = (EditText) findViewById(R.id.main_password_editText);
sendGetReqButton = (Button) findViewById(R.id.main_sendGetReq_button);
sendGetReqButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.main_sendGetReq_button){
// Get the values given in EditText fields
String givenUsername = usernameEditText.getText().toString();
String givenPassword = passwordEditText.getText().toString();
System.out.println("Given usernames is :" + givenUsername + " Given password is :" + givenPassword);
// Pass those values to connectWithHttpGet() method
connectWithHttpGet(givenUsername, givenPassword);
}
}
private void connectWithHttpGet(String givenUsername, String givenPassword) {
// Connect with a server is a time consuming process.
//Therefore we use AsyncTask to handle it
// From the three generic types;
//First type relate with the argument send in execute()
//Second type relate with onProgressUpdate method which I haven't use in this code
//Third type relate with the return type of the doInBackground method, which also the input type of the onPostExecute method
class HttpGetAsyncTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... params) {
// As you can see, doInBackground has taken an Array of Strings as the argument
//We need to specifically get the givenUsername and givenPassword
String paramUsername = params[0];
String paramPassword = params[1];
System.out.println("paramUsername is :" + paramUsername + " paramPassword is :" + paramPassword);
// Create an intermediate to connect with the Internet
HttpClient httpClient = new DefaultHttpClient();
// Sending a GET request to the web page that we want
// Because of we are sending a GET request, we have to pass the values through the URL
HttpGet httpGet = new HttpGet("http://www.nirmana.lk/hec/android/getLogin.php?paramUsername=" + paramUsername + "¶mPassword=" + paramPassword);
try {
// execute(); executes a request using the default context.
// Then we assign the execution result to HttpResponse
HttpResponse httpResponse = httpClient.execute(httpGet);
System.out.println("httpResponse");
// getEntity() ; obtains the message entity of this response
// getContent() ; creates a new InputStream object of the entity.
// Now we need a readable source to read the byte stream that comes as the httpResponse
InputStream inputStream = httpResponse.getEntity().getContent();
// We have a byte stream. Next step is to convert it to a Character stream
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
// Then we have to wraps the existing reader (InputStreamReader) and buffer the input
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
// InputStreamReader contains a buffer of bytes read from the source stream and converts these into characters as needed.
//The buffer size is 8K
//Therefore we need a mechanism to append the separately coming chunks in to one String element
// We have to use a class that can handle modifiable sequence of characters for use in creating String
StringBuilder stringBuilder = new StringBuilder();
String bufferedStrChunk = null;
// There may be so many buffered chunks. We have to go through each and every chunk of characters
//and assign a each chunk to bufferedStrChunk String variable
//and append that value one by one to the stringBuilder
while((bufferedStrChunk = bufferedReader.readLine()) != null){
stringBuilder.append(bufferedStrChunk);
}
// Now we have the whole response as a String value.
//We return that value then the onPostExecute() can handle the content
System.out.println("Returning value of doInBackground :" + stringBuilder.toString());
// If the Username and Password match, it will return "working" as response
// If the Username or Password wrong, it will return "invalid" as response
return stringBuilder.toString();
} catch (ClientProtocolException cpe) {
System.out.println("Exception generates caz of httpResponse :" + cpe);
cpe.printStackTrace();
} catch (IOException ioe) {
System.out.println("Second exception generates caz of httpResponse :" + ioe);
ioe.printStackTrace();
}
return null;
}
// Argument comes for this method according to the return type of the doInBackground() and
//it is the third generic type of the AsyncTask
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(result.equals("working")){
Toast.makeText(getApplicationContext(), "HTTP GET is working...", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(), "Invalid...", Toast.LENGTH_LONG).show();
}
}
}
// Initialize the AsyncTask class
HttpGetAsyncTask httpGetAsyncTask = new HttpGetAsyncTask();
// Parameter we pass in the execute() method is relate to the first generic type of the AsyncTask
// We are passing the connectWithHttpGet() method arguments to that
httpGetAsyncTask.execute(givenUsername, givenPassword);
}
}
Copy above code in to an IDE, where you can easily separate comments from the code and read those comments carefully. There I have explained all the functions and reason for why I am using those functions and classes etc.
I will give you the code of the web page which I am accessing using HTTP GET method. Then you will be able to understand the response you get clearly. Following content comes in a PHP page. According to my program it name as “getLogin.php”
<?php $varUsername = $_GET['paramUsername']; $varPassword = $_GET['paramPassword']; if($varUsername == "anuja" && $varPassword == "123"){ echo 'working'; }else{ echo 'invalid'; } ?>
Simply that is all about for the today’s blog post. Before end this post I would like to thanks all friends in “Nirmana” for hosting my above web page
See you soon… amigos…


Hi Anuj, Nice post but i have one question in my mind you are using static values for the name and password in php code, Can i use same android code with Dynamic values (i.e – already stored in database).
Thanks
Yes, you can. But as far as I understood your question, that part is PHP not Android
Hi Anuj,very useful post..can u plz upload the source code..I think that is very important to us…Thanks.
I need help ..
im trying to use progressDialog on your httpget method . so can you post example on these connectWithHttpGet()
hey buddy you can upload the whole android project??
can you please do a make a source code for the same type with http post request instead of get request , so that i can post to http the username and password with an api
can you send me the source code??? thanks