Thursday, September 14, 2017

Easy Way to Handle Android Notifications

Android Notifications


Android Toast class provides a handy way to show users alerts but problem is that these alerts are not persistent which means alert flashes on the screen for a few seconds and then disappears.

For important messages to be given to the user, it is required to have more persistent method. A notification is a message you can display as an icon at the top of the device which we call notification bar or status bar.
To see the details of the notification, you will have to select the icon which will display notification drawer having detail about the notification. While working with emulator with virtual device, you will have to click and drag down the status bar to expand it which will give you detail as follows. This will be just64 dp tall and called normal view.
Above expanded form can have a Big View which will have additional detail about the notification. You can add up to six additional lines in the notification. The following screenshot shows such notification.
Create and Send Notifications:
You have simple way to create a notification. Follow the following steps in your application to create a notification:
STEP 1 - CREATE NOTIFICATION BUILDER
As a first step is to create a notification builder using NotificationCompat.Builder.build(). You will use Notification Builder to set various Notification properties like its small and large icons, title, priority etc.
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
STEP 2 - SETTING NOTIFICATION PROPERTIES
Once you have Builder object, you can set its Notification properties using Builder object as per your requirement. But this is mandatory to set at least following:
  • A small icon, set by setSmallIcon()
  • A title, set by setContentTitle()
  • Detail text, set by setContentText()
mBuilder.setSmallIcon(R.drawable.notification_icon); mBuilder.setContentTitle("Notification Alert, Click Me!"); mBuilder.setContentText("Hi, This is Android Notification Detail!");
You have plenty of optional properties which you can set for your notification. To learn more about them, see the reference documentation for NotificationCompat.Builder.
STEP 3 - ATTACH ACTIONS
This is an optional part and if requires, you want to attach an action with the notification. An action allows user to go directly from the notification to an Activity in your application, where they can look at one or more events or do further work.

The action is defined by a PendingIntent containing an Intent that starts an Activity in your application. To associate the PendingIntent with a gesture, call the appropriate method of NotificationCompat.Builder.

For example, if you want to start Activity when the user clicks the notification text in the notification drawer, you add the PendingIntent by calling setContentIntent().

A PendingIntent object helps you to perform an action on your application 's behalf, often at a later time, without caring of whether or not your application is running.

We take help of stack builder object which will contain an artificial back stack for the started Activity. This ensures that navigating backward from the Activity leads out of your application to the Home screen.
Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ResultActivity.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
STEP 4 - ISSUE THE NOTIFICATION
Finally, you pass the Notification object to the system by calling NotificationManager.notify() to send your notification. Make sure you call NotificationCompat.Builder.build() method on builder object before notifying it. This method combines all of the options that have been set and return a new Notificationobject.
NotificationManager mNotificationManager =(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// notificationID allows you to update the notification later on.
mNotificationManager.notify(notificationID, mBuilder.build());
The NotificationCompat.Builder Class:
The NotificationCompat.Builder class allows easier control over all the flags, as well as help constructing the typical notification layouts. Following are few important and most frequently used methods available as a part of NotificationCompat.Builder class.
S.N.
Constants & Description
1
Notification build() 
Combine all of the options that have been set and return a new Notification object.
2
NotificationCompat.Builder setAutoCancel (boolean autoCancel) 
Setting this flag will make it so the notification is automatically canceled when the user clicks it in the panel.
3
NotificationCompat.Builder setContent (RemoteViews views) 
Supply a custom RemoteViews to use instead of the standard one.
4
NotificationCompat.Builder setContentInfo (CharSequence info) 
Set the large text at the right-hand side of the notification.
5
NotificationCompat.Builder setContentIntent (PendingIntent intent) 
Supply a PendingIntent to send when the notification is clicked.
6
NotificationCompat.Builder setContentText (CharSequence text) 
Set the text (second row) of the notification, in a standard notification.
7
NotificationCompat.Builder setContentTitle (CharSequence title) 
Set the text (first row) of the notification, in a standard notification.
8
NotificationCompat.Builder setDefaults (int defaults) 
Set the default notification options that will be used.
9
NotificationCompat.Builder setLargeIcon (Bitmap icon) 
Set the large icon that is shown in the ticker and notification.
10
NotificationCompat.Builder setNumber (int number) 
Set the large number at the right-hand side of the notification.
11
NotificationCompat.Builder setOngoing (boolean ongoing) 
Set whether this is an ongoing notification.
12
NotificationCompat.Builder setSmallIcon (int icon) 
Set the small icon to use in the notification layouts.
13
NotificationCompat.Builder setStyle (NotificationCompat.Style style)
Add a rich notification style to be applied at build time.
14
NotificationCompat.Builder setTicker (CharSequence tickerText) 
Set the text that is displayed in the status bar when the notification first arrives.
15
NotificationCompat.Builder setVibrate (long[] pattern)
Set the vibration pattern to use.
16
NotificationCompat.Builder setWhen (long when) 
Set the time that the event occurred. Notifications in the panel are sorted by this time.
Example
Following example shows the functionality of Android notification using a NotificationCompat.BuilderClass which has been introduced in Android 4.1.
Step
Description
1
You will use Eclipse IDE to create an Android application and name it as NotificationDemounder a package com.example.notificationdemo. While creating this project, make sure youTarget SDK and Compile With at the latest version of Android SDK to use higher levels of APIs.
2
Modify src/MainActivity.java file and add the code to define three methods startNotification(), cancelNotification() and updateNotification() to cover maximum functionality related to Android notifications.
3
Create a new Java file src/NotificationView.java, which will be used to display new layout as a part of new activity which will be started when user will click any of the notifications
4
Copy image woman.png in res/drawable-* folders and this image will be used as Notification icons. You can use images with different resolution in case you want to provide them for different devices.
5
Modify layout XML file res/layout/activity_main.xml to add three buttons in linear layout.
6
Create a new layout XML file res/layout/notification.xml. This will be used as layout file for new activity which will start when user will click any of the notifications.
7
Modify res/values/strings.xml to define required constant values
8
Run the application to launch Android emulator and verify the result of the changes done in the aplication.
Following is the content of the modified main activity filesrc/com.example.notificationdemo/MainActivity.java. This file can include each of the fundamental lifecycle methods.
package com.example.notificationdemo;
import android.os.Bundle;
import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TaskStackBuilder;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity
{
private NotificationManager mNotificationManager;
private int notificationID = 100;
private int numMessages = 0;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity _ main);
Button startBtn = (Button) findViewById(R.id.start);
startBtn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
displayNotification();
}
});
Button cancelBtn = (Button) findViewById(R.id.cancel);
cancelBtn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
cancelNotification();
}
});
Button updateBtn = (Button) findViewById(R.id.update);
updateBtn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
updateNotification();
}
});
}
protected void displayNotification()
{
Log.i( " Start " , " notification " );
/* Invoking the default notification service */
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle( " New Message " );
mBuilder.setContentText( " You ' ve received new message. " );
mBuilder.setTicker( " New Message Alert!");
mBuilder.setSmallIcon(R.drawable.woman);
/* Increase notification number every time a new notification arrives */
mBuilder.setNumber(++numMessages);
/* Creates an explicit intent for an Activity in your app */
Intent resultIntent = new Intent(this, NotificationView.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(NotificationView.class);
/* Adds the Intent that starts the Activity to the top of the stack */
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent( 0,PendingIntent.FLAG _ UPDATE _ CURRENT );
mBuilder.setContentIntent(resultPendingIntent);
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION _ SERVICE);
/* notificationID allows you to update the notification later on. */
mNotificationManager.notify(notificationID, mBuilder.build());
}
protected void cancelNotification()
{
Log.i( " Cancel " , " notification " );
mNotificationManager.cancel(notificationID);
}
protected void updateNotification()
{
Log.i( " Update " , " notification " );
/* Invoking the default notification service */
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle( " Updated Message " );
mBuilder.setContentText( " You ' ve got updated message. " );
mBuilder.setTicker( " Updated Message Alert! " );
mBuilder.setSmallIcon(R.drawable.woman);
/* Increase notification number every time a new notification arrives */
mBuilder.setNumber( + + numMessages);
/* Creates an explicit intent for an Activity in your app */
Intent resultIntent = new Intent(this, NotificationView.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(NotificationView.class);
/* Adds the Intent that starts the Activity to the top of the stack */
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG _ UPDATE _ CURRENT );
mBuilder.setContentIntent(resultPendingIntent);
mNotificationManager =(NotificationManager) getSystemService(Context.NOTIFICATION _ SERVICE);
/* Update the existing notification using same notification ID */
mNotificationManager.notify(notificationID, mBuilder.build());
}
}
Following is the content of the modified main activity filesrc/com.example.notificationdemo/NotificationView.java.
package com.example.notificationdemo;
import android.os.Bundle;
import android.app.Activity;
public class NotificationView extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.notification);
}
}
Following is the content of res/layout/activity_main.xml file:
< LinearLayout xmlns:android= " http: / / schemas.android.com / apk / res / android "
android:layout _ width= " fill _ parent "
android:layout _ height= " fill _ parent "
android:orientation= " vertical " >
< Button android:id= " @+id / start "
android:layout _ width= " fill _ parent "
android:layout _ height= " wrap _ content "
android:text= " @string / start _ note " / >
< Button android:id= " @+id / cancel "
android:layout _ width= " fill _ parent "
android:layout _ height= " wrap _ content "
android:text= " @string / cancel _ note " / >
< Button android:id= " @+id / update "
android:layout _ width= " fill _ parent "
android:layout _ height= " wrap _ content "
android:text= " @string / update _ note " / >
< / LinearLayout >
Following is the content of res/layout/notification.xml file:
< ?xml version= " 1.0 " encoding= " utf-8 " ? >
< LinearLayout xmlns:android= " http: / / schemas.android.com / apk / res / android "
android:orientation= " vertical "
android:layout _ width= " fill _ parent "
android:layout _ height= " fill _ parent " >
< TextView
android:layout _ width= " fill _ parent "
android:layout _ height= " 400dp "
android:text= " Hi, Your Detailed notification view goes here.... " / >
< / LinearLayout >
Following is the content of res/values/strings.xml to define two new constants:
< ?xml version= " 1.0 " encoding= " utf - 8 " ? >
< resources >
< string name= " app_name " > NotificationDemo < / string >
< string name= " action_settings " > Settings < / string >
< string name= " hello_world " > Hello world! < / string >
< string name= " start_note " > Start Notification < / string >
< string name= " cancel_note " > Cancel Notification < / string >
< string name= " update_note " > Update Notification < / string >
< / resources >
Following is the default content of AndroidManifest.xml:
< ?xml version= " 1.0 " encoding= " utf - 8 " ? >
< manifest xmlns:android= " http: / / schemas.android.com / apk / res / android "
package= " com.example.notificationdemo "
android:versionCode= " 1 "
android:versionName= " 1.0 " >
< uses - sdk
android:minSdkVersion= " 17 "
android:targetSdkVersion= " 17 " / >
< application
android:allow Backup= " true "
android:icon= " @drawable / ic _ launcher "
android:label= " @string / app _ name "
android:theme= " @style / AppTheme " >
< activity
android:name= " com.example.notificationdemo.MainActivity "
android:label= " @string / app _ name " >

< action android:name= " android.intent.action.MAIN " / >
< category android:name= " android.intent.category.LAUNCHER " / >
< / intent - filter >
< / activity >
< activity android:name= " .NotificationView "
android:label= " Details of notification "
android:parentActivityName= " .MainActivity " >
< meta - data
android:name= " android.support.PARENT _ ACTIVITY "
android:value= ". MainActivity " / >
< / activity >
< / application >
< / manifest >
Let ' s try to run your NotificationDemo application. I assume you had created your AVD while doing environment setup. To run the app from Eclipse, open one of your project ' s activity files and click Run http://glistertech.com/elearning/media/215_run%20icon.jpg icon from the toolbar. Eclipse installs the app on your AVD and starts it and if everything is fine with your setup and application, it will display following Emulator window:
Now click Start Notification button, you will see at the top a message " New Message Alert! " will display momentarily and after that you will have following screen having a small icon at the top left corner.
Now lets expand the view, long click on the small icon, after a second it will display date information and this is the time when you should drag status bar down without releasing mouse. You will see status bar will expand and you will get following screen:
Now let's try to click on the image icon, this will launch your new activity which you have set using intent and you will have following screen:
Next, you can click on " Detail of notification " and it will take you back to the main screen where you can try using Update Notification button which will update existing notification and number will increase by 1 but if you will send notification with new notification ID then it will keep adding in the stack and you see them separately listed on the screen.
Big View Notification:
The following code snippet demonstrates how to alter the notification created in the previous snippet to use the Inbox big view style. I am going to update displayNotification() modification method to show this functionality:
protected void displayNotification()
{
Log.i( " Start " , " notification " );
/* Invoking the default notification service */
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle( " New Message " );
mBuilder.setContentText( " You ' ve received new message. " );
mBuilder.setTicker( " New Message Alert! " );
mBuilder.setSmallIcon(R.drawable.woman);
/* Increase notification number every time a new notification arrives */
mBuilder.setNumber( + + numMessages);
/* Add Big View Specific Configuration */
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
String[] events = new String[6];
events[0] = new String( " This is first line.... " );
events[1] = new String( " This is second line... " );
events[2] = new String( " This is third line... " );
events[3] = new String( " This is 4th line... " );
events[4] = new String( " This is 5th line... " );
events[5] = new String( " This is 6th line... " );
// Sets a title for the Inbox style big view
inboxStyle.setBigContentTitle( " Big Title Details: " );
// Moves events into the big view
for (int i=0; i < events.length; i + +) {
inboxStyle.addLine(events[i]);
}
mBuilder.setStyle(inboxStyle);
/* Creates an explicit intent for an Activity in your app */
Intent resultIntent = new Intent(this, NotificationView.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(NotificationView.class);
/* Adds the Intent that starts the Activity to the top of the stack */
stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG _ UPDATE _ CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION _ SERVICE);
/* notificationID allows you to update the notification later on. */
mNotificationManager.notify(notificationID, mBuilder.build());
}
Now if you will try to run your application then you will find following result in expanded form of the view:

Integration of PHP and MYSQL with Android

ANDROID PHP

            In this chapter, we are going to explain, how you can integrate PHP and MYSQL with your android application. This is very useful in case you have a webserver, and you want to access its data on your android application.

            MYSQL is used as a database at the webserver and PHP is used to fetch data from the database. Our application will communicate with the PHP page with necessary parameters and PHP will contact MYSQL database and will fetch the result and return the results to us.
PHP - MYSQL
CREATING DATABASE
            MYSQL database can be created easily using this simple script. The CREATE DATABASE statement creates the database.
< ?php
$con=mysqli _ connect( " example.com " , " username " , " password " );
$sql= " CREATE DATABASE my _ db " ;
if (mysqli _ query($con,$sql))
{
echo " Database my _ db created successfully " ;
}
? >
CREATING TABLES:
            Once database is created, it’s time to create some tables in the database. The CREATE TABLE statement creates the database.
< ?php
$con=mysqli _ connect( " example.com " , " username " , " password " , " my _ db " );
$sql= " CREATE TABLE table1(Username CHAR(30),Password CHAR(30),Role CHAR(30)) " ;
if (mysqli _ query($con,$sql))
{
echo " Table have been created successfully " ;
}
? >
INSERTING VALUES IN TABLES:
            When the database and tables are created. Now it’s time to insert some data into the tables. The Insert Into statement creates the database.
< ?php
$con=mysqli _ connect( " example.com " , " username " , " password " , " my _ db " );
$sql= " INSERT INTO table1 (FirstName, LastName, Age) VALUES ( ' admin ' , ' admin ' , ' adminstrator ' ) " ;
if (mysqli _ query($con,$sql))
{
echo " Values have been inserted successfully " ;
}
? >
PHP - GET AND POST METHODS:
            PHP is also used to fetch the record from the MySQL database once it is created. In order to fetch record some information must be passed to PHP page regarding what record to be fetched.
            The first method to pass information is through GET method in which $ _ GET command is used. The variables are passed in the URL and the record is fetched. Its syntax is given below:
< ?php
$con=mysqli _ connect( " example.com " , " username " , " password " , " database name " );
if (mysqli _ connect _ errno($con))
{
echo " Failed to connect to MySQL: " . mysqli _ connect _ error();
}
$username = $ _ GET[ ' username ' ];
$password = $ _ GET[ ' password ' ];
$result = mysqli _ query($con, " SELECT Role FROM table1 where Username= ' $username ' and Password= ' $password ' " );
$row = mysqli _ fetch _ array($result);
$data = $row[0];
if($data)
{
echo $data;
}
ysqli _ close($con);
? >
            The second method is to use POST method. The only change in the above script is to replace $ _ GET with $ _ POST. In Post method , the variables are not passed through URL.
ANDROID-CONNECTING MYSQL
CONNECTING VIA GET METHOD
            There are two ways to connect to MYSQL via PHP page. The first one is called Get method. We will useHttpGet and HttpClient class to connect. Their syntax is given below:
URL url = new URL(link);
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(link));
            After that you need to call execute method of HttpClient class and recieve it in a HttpResponse object. After that you need to open streams to recieve the data.
HttpResponse response = client.execute(request);
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
CONNECTING VIA POST METHOD:
            In the Post method, the URLEncoder,URLConnection class will be used. The urlencoder will encode the information of the passing variables. It's syntax is given below:
URL url = new URL(link);
String data = URLEncoder.encode( " username " , " UTF - 8 " )
+ ; " = " + ; URLEncoder.encode(username, " UTF - 8 " );
data + ;= " & " + ; URLEncoder.encode( " password " , " UTF - 8 " )
+ ; " = " + ; URLEncoder.encode(password, " UTF - 8 " );
URLConnection conn = url.openConnection();
            The last thing you need to do is to write this data to the link. After writing , you need to open stream to receive the responded data.
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write( data );
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
Example
            The below example is a complete example of connecting your android application with MYSQL database via PHP page. It creates a basic application that allows you to login using GET and POST method.
PHP - MYSQL PART:
            In this example a database with the name of temp has been created at 000webhost.com. In that database , a table has been created with the name of table1. This table has three fields. (Username, Password, Role). The table has only one record which is ("admin","admin","administrator").
The PHP page has been given below which takes parameters by post method.
< ?php
$con=mysqli _ connect( " mysql10.000webhost.com " , " username " , " password " , " db _ name " );
if (mysqli _ connect _ errno($con))
{
echo " Failed to connect to MySQL: " . mysqli _ connect _ error();
}
$username = $ _ POST[ ' username ' ];
$password = $ _ POST[ ' password ' ];
$result = mysqli _ query($con, " SELECT Role FROM table1 where
Username= ' $username ' and Password= ' $password ' " );
$row = mysqli _ fetch _ array($result);
$data = $row[0];
if($data)
{
echo $data;
}
mysqli _ close($con);
? >
ANDROID PART:
            To experiment with this example , you need to run this on an actual device on which WIFI internet is connected.
Steps
Description
1
You will use Eclipse IDE to create an Android application and name it as PHPMYSQL under a package com.example.phpmysql. While creating this project, make sure you Target SDK and Compile With at the latest version of Android SDK to use higher levels of APIs.
2
Modify src/MainActivity.java file to add Activity code.
3
Create src/SiginActivity.java file to add PHPMYSQL code.
4
Modify layout XML file res/layout/activity_main.xml add any GUI component if required.
5
Modify res/values/string.xml file and add necessary string components.
6
Modify AndroidManifest.xml to add necessary permissions.
7
Run the application and choose a running android device and install the application on it and verify the results.
Here is the content of src/com.example.phpmysql/MainActivity.java.
package com.example.phpmysql;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity
{
private EditText usernameField,passwordField;
private TextView status,role,method;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
usernameField = (EditText)findViewById(R.id.editText1);
passwordField = (EditText)findViewById(R.id.editText2);
status = (TextView)findViewById(R.id.textView6);
role = (TextView)findViewById(R.id.textView7);
method = (TextView)findViewById(R.id.textView9);
} @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void login(View view)
{
String username = usernameField.getText().toString();
String password = passwordField.getText().toString();
method.setText( " Get Method " );
new SigninActivity(this,status,role,0).execute(username,password);
}
public void loginPost(View view)
{
String username = usernameField.getText().toString();
String password = passwordField.getText().toString();
method.setText( " Post Method " );
new SigninActivity(this,status,role,1).execute(username,password);
}
}
Here is the content of src/com.example.phpmysql/SigninActivity.java.
package com.example.phpmysql;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.TextView;
public class SigninActivity extends AsyncTask < String,Void,String >
{
private TextView statusField,roleField;
private Context context;
private int byGetOrPost = 0;
//flag 0 means get and 1 means post.(By default it is get.)
public SigninActivity(Context context,TextView statusField,
TextView roleField,int flag)
{
this.context = context;
this.statusField = statusField;
this.roleField = roleField;
byGetOrPost = flag;
}
protected void onPreExecute()
{
}
@Override
protected String doInBackground(String... arg0)
{
if(byGetOrPost == 0){ //means by Get Method
try
{
String username = (String)arg0[0];
String password = (String)arg0[1];
String link = " http://myphpmysqlweb.hostei.com/login.php?username= " + username + " &password= " + password;
URL url = new URL(link);
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(link));
HttpResponse response = client.execute(request);
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer( " " );
String line= " " ;
while ((line = in.readLine()) != null)
{
sb.append(line);
break;
}
in.close();
return sb.toString();
}
catch(Exception e)
{
return new String( " Exception: " + e.getMessage());
}
}
else
{
try
{
String username = (String)arg0[0];
String password = (String)arg0[1];
String link="http://myphpmysqlweb.hostei.com/loginpost.php";
String data = URLEncoder.encode( " username " , " UTF - 8 " )
+ " = " + URLEncoder.encode(username, " UTF - 8 " );
data + = " & " + URLEncoder.encode( " password " , " UTF - 8 " )
+ " = " + URLEncoder.encode(password, " UTF - 8 " );
URL url = new URL(link);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter
(conn.getOutputStream());
wr.write( data );
wr.flush();
BufferedReader reader = new BufferedReader (new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while((line = reader.readLine()) != null)
{
sb.append(line);
break;
}
return sb.toString();
}
catch(Exception e)
{
return new String( " Exception: " + e.getMessage());
}
}
}
@Override
protected void onPostExecute(String result)
{
this.statusField.setText( " Login Successful " );
this.roleField.setText(result);
}
}
Here is the content of activity_main.xml.
< RelativeLayout xmlns:android= " http://schemas.android.com/apk/res/android "
xmlns:tools= " http://schemas.android.com/tools "
android:layout _ width= " match _ parent "
android:layout _ height= " match _ parent "
android:paddingBottom= " @dimen/activity _ vertical _ margin "
android:paddingLeft= " @dimen/activity _ horizontal _ margin "
android:paddingRight= " @dimen/activity _ horizontal _ margin "
android:paddingTop= " @dimen/activity _ vertical _ margin "
tools:context= " .MainActivity " >
< EditText
android:id= " @ + id/editText2 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignRight= " @ + id/editText1 "
android:layout _ below= " @ + id/editText1 "
android:layout _ marginTop= " 25dp "
android:ems= " 10 "
android:inputType= " textPassword " >
< /EditText >
< EditText
android:id= " @ + id/editText1 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignParentRight= " true "
android:layout _ alignParentTop= " true "
android:layout _ marginTop= " 44dp "
android:ems= " 10 " >
< requestFocus android:layout _ width= " wrap _ content " / >
< /EditText >
< TextView
android:id= " @ + id/textView1 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignBottom= " @ + id/editText1 "
android:layout _ alignParentLeft= " true "
android:text= " @string/Username " / >
< TextView
android:id= " @ + id/textView3 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignParentTop= " true "
android:layout _ centerHorizontal= " true "
android:text= " @string/App "
android:textAppearance= " ?android:attr/textAppearanceLarge " / >
< TextView
android:id= " @ + id/textView7 "
android:layout _ height= " wrap _ content "
android:layout _ alignBottom= " @ + id/textView5 "
android:layout _ alignLeft= " @ + id/textView6 "
android:text= " @string/Role "
android:textAppearance= " ?android:attr/textAppearanceMedium "
android:textSize= " 10sp " / >
< TextView
android:id= " @ + id/textView5 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ below= " @ + id/textView6 "
android:layout _ marginTop= " 27dp "
android:layout _ toLeftOf= " @ + id/editText1 "
android:text= " @string/LoginRole " / >
< TextView
android:id= " @ + id/textView8 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ above= " @ + id/textView6 "
android:layout _ alignLeft= " @ + id/textView5 "
android:layout _ marginBottom= " 27dp "
android:text= " @string/method " / >
< TextView
android:id= " @ + id/textView4 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignLeft= " @ + id/textView8 "
android:layout _ below= " @ + id/button1 "
android:layout _ marginTop= " 86dp "
android:text= " @string/LoginStatus " / >
< TextView
android:id= " @ + id/textView6 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignTop= " @ + id/textView4 "
android:layout _ centerHorizontal= " true "
android:text= " @string/Status "
android:textAppearance= " ?android:attr/textAppearanceMedium "
android:textSize= " 10sp " / >
< TextView
android:id= " @ + id/textView9 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignBottom= " @ + id/textView8 "
android:layout _ alignLeft= " @ + id/textView6 "
android:text= " @string/Choose "
android:textAppearance= " ?android:attr/textAppearanceMedium "
android:textSize= " 10sp " / >
< Button
android:id= " @ + id/button2 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ centerVertical= " true "
android:layout _ toRightOf= " @ + id/textView6 "
android:onClick= " loginPost "
android:text= " @string/LoginPost " / >
< Button
android:id= " @ + id/button1 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignBaseline= " @ + id/button2 "
android:layout _ alignBottom= " @ + id/button2 "
android:layout _ alignLeft= " @ + id/textView2 "
android:onClick= " login "
android:text= " @string/LoginGet " / >
< TextView
android:id= " @ + id/textView2 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignBaseline= " @ + id/editText2 "
android:layout _ alignBottom= " @ + id/editText2 "
android:layout _ alignParentLeft= " true "
android:text= " @string/Password " / >
< /RelativeLayout >
Here is the content of Strings.xml.
< ?xml version= " 1.0 " encoding= " utf-8 " ? >
< resources >
< string name= " app _ name " > PHPMYSQL < /string >
< string name= " action _ settings " > Settings < /string >
< string name= " hello _ world " > Hello world! < /string >
< string name= " Username " > Username < /string >
< string name= " Password " > Password < /string >
< string name= " LoginGet " > Login - Get < /string >
< string name= " LoginPost " > Login - Post < /string >
< string name= " App " > Login Application < /string >
< string name= " LoginStatus " > Login Status < /string >
< string name= " LoginRole " > Login Role < /string >
< string name= " Status " > Not login < /string >
< string name= " Role " > Not assigned < /string >
< string name= " method " > Login Method < /string >
< string name= " Choose " > Choose Method < /string >
< /resources >
Here is the content of AndroidManifest.xml.
< ?xml version= " 1.0 " encoding= " utf-8 " ? >
< manifest xmlns:android= " http://schemas.android.com/apk/res/android "
package= " com.example.phpmysql "
android:versionCode= " 1 "
android:versionName= " 1.0 " >
< uses-sdk
android:minSdkVersion= " 8 "
android:targetSdkVersion= " 17 " / >
< uses-permission android:name= " android.permission.INTERNET " / >
< uses-permission android:name= " android.permission.ACCESS _ NETWORK _ STATE " / >
< application
android:allowBackup= " true "
android:icon= " @drawable/ic _ launcher "
android:label= " @string/app _ name "
android:theme= " @style/AppTheme " >
< activity
android:name= " com.example.phpmysql.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 >
            Let's try to run your PHPMYSQL application. I assume you have connected your actual Android Mobile device with your computer. To run the app from Eclipse, open one of your project's activity files and click Run http://glistertech.com/elearning/media/215_run%20icon.jpgicon from the toolbar. Before starting your application, Eclipse will display following window to select an option where you want to run your Android application.



            Select your mobile device as an option and then check your mobile device .Now just type in your username and password. In my case i am typing admin as username and password. 
Now press the Get button and wait a few seconds and response will be downloaded and will be shown to you. In this case, the response is the ROLE that is fetched in case of admin as username and password.Now again press the POST button and same result woud appear. All the four screens are shown below


Easy Way to Handle Android Notifications

Android Notifications Android Toast class provides a handy way to show users alerts but problem is that these alerts are not persist...