WebServer for Android phones
In this lecture, I am going to explain:
• How you can integrate PHP 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 can then be 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.
• PHP may then contact MYSQL database and will fetch the result and
return the results to android application.
Simple PHP Server for receiving and sending
same information
<?php
$abc = $_POST['username'];
echo $abc;
?>
PHP - GET and POST methods
GET and POST methods are used to send some information/data/record to
PHP page.
The first method to pass information is through GET method in which $_GET
command is used. The variables are passed in the url.
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.
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 −
String data = URLEncoder.encode("username", "UTF-8") + "=" +
URLEncoder.encode(username, "UTF-8");
URL url = new URL(link);
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(newInputStreamReader(conn.getInputStream()));
reader.readLine ();
Permissions
Add following permission code in AndroidManifest.xml file
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
Complete Example (1/3)
public class MainActivity extends Activity {
MyTasl request;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
request = new MyTasl();
request.execute();
}
}
Complete Example (2/3)
public class MyTasl extends AsyncTask<String,String,String> {
@Override
protected String doInBackground(String... params) {
String Complete_line="";
try {
String username = "Jawad Ahmad";
String data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(username, "UTF-8");
URL url = new URL("http://172.20.100.51/MyPhpFileP.php");
URLConnection con = (URLConnection) url.openConnection();
con.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(data);
wr.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = null;
Complete_line = null;
// Read Server Response
while ((line = reader.readLine()) != null) {
Complete_line = Complete_line + line;
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return Complete_line;
}
}
Complete Example (3/3)
@Override
protected void onPostExecute(String result){
this.roleField.setText(result);
}
Settings Wamp PHP Server
Instructions:
Wamp configuration. For PHP server:
->Right-Click-Wamp-green-icon>open Apache>click on httpd.conf.
->backup the original file contents.
->modify line 245 of .conf file add modifications.txt contents.
Now the system should work and server should give response.
If it doesn't or a forbidden exception is thrown;
Create a firewall inbound rule, on Port 80, for all connections.
see screen shots for firewall, name the rule,
Do keep in mind
->to disable the rule after testing your app, otherwise it could make your
computer vulnerable.
Repetition- Example
public class MainActivity extends Activity {
private EditText usernameField;
protected void onCreate() {
….
….
usernameField = (EditText)findViewById(R.id.editText1);
public void loginPost(View view){
String username = usernameField.getText().toString();
new SigninActivity(this,1).execute(username);
}
}
Repetition- Example
public class SigninActivity extends AsyncTask<String,Void,String>{
private Context context;
public SigninActivity(Context context,TextView statusField,TextView roleField,int flag) {
this.context = context;
}
@Override
protected void onPostExecute(String result){
this.statusField.setText("Login Successful");
this.roleField.setText(result);
}
.
.
.
.
.
//protected String doInBackground(String... arg0)
// Next Slide.
..
.
.
.
}
Repetition- Example
@Override
protected String doInBackground(String... arg0) {
try{
String username = (String)arg0[0];
String link="http://myphpmysqlweb.hostei.com/loginpost.php";
String data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(username, "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()));
String line = null;
String Complete_line = null;
// Read Server Response
while((line = reader.readLine()) != null)
{
Complete_line = Complete_line +line;
break;
}
return Complete_line;
}
catch(Exception e){
return new String("Exception: " + e.getMessage());
}