Send Data From Android Device To Php Server

In this tutorial, we will show you how android device and PHP server will communicate with each other using httpclient or httppost method. When you are going to implement your idea into an android app you need a server where you will store DATA & get DATA from server. These ‘DATA’ could be user profile, last purchase details, users activity, time, data, images etc. In this tutorial we will first create an login form for user. After submit button press user’s data like username , lastname , password and time wi send to our PHP server database. Summary steps to develop an android client and PHP server communication application :

1) Create User login Form in android app.
2) Get form data using MainActivity.class(value holder class).
3) Create Database table to store user details.
4) Create PHP server to accept data from android client.
5) Run App in Real Device using USB Debugging.

Android client send Data to PHP server

Login & Download source code

download-code350-100

 




Create User Login Form in Android App

Create new android project in android studio. Go to File–> New –> New Project and give any name to your app (Mine was SendDataToPHP). Now on activity_main.xml create four EditView, One TextView. one Spinner & one Button.

EditView-

User can write any text in this box. In our case user will type username, password, phone number & hint answer

Textbox-

Display any text to user like ” Create login “.

Spinner-

A Dropdown list is called Spinner in android. In our case we will put some questions in this list

senddata login form

























activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_gravity="center"
    android:gravity="center"
    android:background="#113d48"
    android:layout_marginTop="5dp"
    android:paddingBottom="5dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:accessibilityLiveRegion="assertive"
    android:focusable="true"
    android:outlineProvider="paddedBounds">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Create Login "
        android:layout_marginTop="20dp"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="10dp"
        android:layout_marginRight="10dp"
        android:background="#68e3dde0"
        android:textColor="#f6bd1f"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:textColorHint="#ffffff"
        android:textAlignment="center" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minWidth="250dp"
        android:minHeight="25dp"
        android:hint="@string/Create_Username"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="15dp"
        android:layout_marginRight="10dp"
        android:id="@+id/user_name"
        android:ellipsize="end"
        android:singleLine="true"
        android:maxLines="1"
        android:background="#68e3dde0"
        android:textColor="#ffffff"
        android:paddingLeft="5dp"
        android:paddingTop="1dp"
        android:paddingBottom="1dp"
        android:textColorHint="#ffffff" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minWidth="250dp"
        android:minHeight="25dp"
        android:hint="@string/Create_Password"
        android:inputType="textPassword"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="15dp"
        android:layout_marginRight="10dp"
        android:id="@+id/usnm_pass"
        android:ellipsize="end"
        android:singleLine="true"
        android:maxLines="1"
        android:background="#68e3dde0"
        android:textColor="#ffffff"
        android:paddingLeft="5dp"
        android:paddingTop="1dp"
        android:paddingBottom="1dp"
        android:textColorHint="#ffffff" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minWidth="250dp"
        android:minHeight="25dp"
        android:hint="@string/User_Phone_Number"
        android:inputType="textPassword"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="15dp"
        android:layout_marginRight="10dp"
        android:id="@+id/user_number"
        android:ellipsize="end"
        android:singleLine="true"
        android:maxLines="1"
        android:background="#68e3dde0"
        android:textColor="#ffffff"
        android:paddingLeft="5dp"
        android:paddingTop="1dp"
        android:paddingBottom="1dp"
        android:textColorHint="#ffffff" />

    <Spinner
        android:id="@+id/hintQuestion"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ff838383"
        android:textColor="#ffffff"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="15dp"
        android:layout_marginRight="10dp"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:paddingLeft="3dp"
        android:paddingRight="3dp"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minWidth="250dp"
        android:minHeight="25dp"
        android:hint="@string/Type_Answer"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="15dp"
        android:layout_marginRight="10dp"
        android:id="@+id/hint_answer"
        android:ellipsize="end"
        android:singleLine="true"
        android:maxLines="1"
        android:background="#68e3dde0"
        android:textColor="#ffffff"
        android:paddingLeft="5dp"
        android:paddingTop="2dp"
        android:paddingBottom="5dp"
        android:textColorHint="#ffffff" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/submit"
        android:text="Sign IN"
        android:minWidth="150dp"
        android:minHeight="25dp"
        android:layout_marginLeft="50dp"
        android:layout_marginRight="50dp"
        android:textColor="#059"/>


</LinearLayout>

Get Form Data Using MainActivity.class(value holder class)

Now We have form layout ready & we will get all form data value using MainActivity.class file & will send data to PHP server in next step. First declare all TextView ,EditView, Spinner & button above onCreate(Bundle savedInstanceState) method. I hope you already know how define EditView with EditView Id mention in activity_main.xml file. For beginners i write these 2 lines. Inside onCreate() connect EditView to EditView id define in activity_main.xml file(like R.id.user_name).

    private EditText username, password, phonenumber, hintans;
    private Spinner hintquestion;
    private Button submit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // signup get name, pass and mobile
        username = (EditText) findViewById(R.id.user_name); /// look at id parameter in activity_main.xml file
        password = (EditText) findViewById(R.id.usnm_pass);
        phonenumber =(EditText) findViewById(R.id.user_number);
        hintans = (EditText) findViewById(R.id.hint_answer);
        submit =(Button) findViewById(R.id.submit);
        hintquestion = (Spinner) findViewById(R.id.hintQuestion);
        // add hintQuestion into  spinner

}

If your login form contains security questions as a dropdown list(Spinner). See last line in above code i have added spinner for hint questions. To add questions in spinner you have to create a ArrayList object. Add all questions to ArrayList & Finally add ArrayList to spinner using default Adapter called ArrayAdapter.

  hintquestion = (Spinner) findViewById(R.id.hintQuestion);
        // add hintQuestion into  spinner
        // create dynamic list of questions
        ArrayList<String> hintQq = new ArrayList<String>();
        hintQq.add(getString(R.string.Select_Password_Recovery_Question));  
        // look at String.xml file
        hintQq.add(getString(R.string.Your_grandmother_name));
        hintQq.add(getString(R.string.Your_favorite_Car));
        hintQq.add(getString(R.string.Your_favorite_movie));
        hintQq.add(getString(R.string.Your_father_nick_name));
        hintQq.add(getString(R.string.Your_favorite_actress_name));
        hintQq.add(getString(R.string.Your_favorite_company));

        ArrayAdapter<String> adapterHintQ = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, hintQq);
       // add this list into hintquestion spinner
        hintquestion.setAdapter(adapterHintQ);

Now when user press submit button- first check whether all field are empty or not. Second check which language (Keyboard language- English, Hindi, etc.) your server suppose to be support. Here i am considering first case only- check all field are none empty. Once it is clear that user filled all the required fields properly then we need a ArrayList that holder all data which will be pass to AsyncTask. AsyncTask is use for all network related task. AsyncTask execute on separate thread in background not in Main thread. Android OS does not allow network task to be execute on main thread.

  // on submit button click- check where all editText are empty or not
        submit.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // match passwrd and finish    spinner se date of birth lena

                if( TextUtils.isEmpty(username.getText().toString().trim())  ) {
                    //mobilenumber.setHint(R.string.Type_Username); you can set hint
                    username.setError(getString(R.string.fill_entry));
                    username.setFocusable(true);
                    username.requestFocus();

                }else if(TextUtils.isEmpty(password.getText().toString().trim())) {
                    password.setError(getString(R.string.fill_entry ) );
                    // fullname.setLinkTextColor(Color.parseColor("#FE000A"));  you can change text color
                    password.setFocusable(true);
                    password.requestFocus();

                }else if(TextUtils.isEmpty(phonenumber.getText().toString().trim())) {
                    phonenumber.setError(getString(R.string.fill_entry ) );
                    // fullname.setLinkTextColor(Color.parseColor("#FE000A"));  you can change text color
                    phonenumber.setFocusable(true);
                    phonenumber.requestFocus();

                }else if(TextUtils.isEmpty(hintans.getText().toString().trim())) {
                    hintans.setError(getString(R.string.fill_entry ) );
                    // fullname.setLinkTextColor(Color.parseColor("#FE000A"));  you can change text color
                    hintans.setFocusable(true);
                    hintans.requestFocus();

                }else{
                    // if every entry is filled with value then send this data to PHP server

                    ArrayList<String> mylist = new ArrayList<String>();

                    mylist.add(String.valueOf(username.getText().toString()));
                    mylist.add(String.valueOf(password.getText().toString()));
                    mylist.add(String.valueOf(phonenumber.getText().toString()));
                    mylist.add(String.valueOf(hintquestion.getSelectedItem().toString()));
                    mylist.add(String.valueOf(hintans.getText().toString()));

                    new sendUserDetailTOServer().execute(mylist);

                      /*  you can call sendUserDetailTOServer by this way if don't need parameter to pass
                            sendUserDetailTOServer dl = new sendUserDetailTOServer();
                        dl.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
                  */

                }
            }
        });

AsyncTask have three sections.

1) onPreExecute() – prepare task related functions like show progress bar to user.
2) doInBackground() – perform background task like send request to server.
3) onPostExecute() – present server response to user screen on main thread.

//  send user data list using AsyncTask 
new sendUserDetailTOServer().execute(mylist);

// AsynchTask Class start
 public class sendUserDetailTOServer extends AsyncTask< ArrayList<String>, Void, String> {
  // mylist hold by ArrayList<String>

  protected void onPreExecute(){}

 // ArrayList<String> (mylist) pass to background thread
  protected String doInBackground(ArrayList<String>... alldata) {}

  protected void onPostExecute(String result)

Complete MainActivity.class Code

package blueappsoftware.senddatatophp;

import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
/// user this import for httpclient methods
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {

    private EditText username, password, phonenumber, hintans;
    private Spinner hintquestion;
    private Button submit;
/// get time and date
    private DateFormat df = new SimpleDateFormat("h:mm a");
    private Calendar c = Calendar.getInstance();
    private SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
    private String time ,date;


    // use in hold response from server
    private InputStream is=null;
    private String result=null;
    private String line=null;
    private int code;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // signup get name, pass and mobile
        username = (EditText) findViewById(R.id.user_name); /// look at id parameter in activity_main.xml file
        password = (EditText) findViewById(R.id.usnm_pass);
        phonenumber =(EditText) findViewById(R.id.user_number);
        hintans = (EditText) findViewById(R.id.hint_answer);
        submit =(Button) findViewById(R.id.submit);

        hintquestion = (Spinner) findViewById(R.id.hintQuestion);
        // add hintQuestion into  spinner
        // create dynamic list of questions
        ArrayList<String> hintQq = new ArrayList<String>();
        hintQq.add(getString(R.string.Select_Password_Recovery_Question));  // look at String.xml file
        hintQq.add(getString(R.string.Your_grandmother_name));
        hintQq.add(getString(R.string.Your_favorite_Car));
        hintQq.add(getString(R.string.Your_favorite_movie));
        hintQq.add(getString(R.string.Your_father_nick_name));
        hintQq.add(getString(R.string.Your_favorite_actress_name));
        hintQq.add(getString(R.string.Your_favorite_company));

        ArrayAdapter<String> adapterHintQ = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, hintQq);
       // add this list into hintquestion spinner
        hintquestion.setAdapter(adapterHintQ);

        // on submit button click- check where all editText are empty or not
        submit.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // match passwrd and finish    spinner se date of birth lena

                if( TextUtils.isEmpty(username.getText().toString().trim())  ) {
                    //mobilenumber.setHint(R.string.Type_Username); you can set hint
                    username.setError(getString(R.string.fill_entry));
                    username.setFocusable(true);
                    username.requestFocus();

                }else if(TextUtils.isEmpty(password.getText().toString().trim())) {
                    password.setError(getString(R.string.fill_entry ) );
                    // fullname.setLinkTextColor(Color.parseColor("#FE000A"));  you can change text color
                    password.setFocusable(true);
                    password.requestFocus();

                }else if(TextUtils.isEmpty(phonenumber.getText().toString().trim())) {
                    phonenumber.setError(getString(R.string.fill_entry ) );
                    // fullname.setLinkTextColor(Color.parseColor("#FE000A"));  you can change text color
                    phonenumber.setFocusable(true);
                    phonenumber.requestFocus();

                }else if(TextUtils.isEmpty(hintans.getText().toString().trim())) {
                    hintans.setError(getString(R.string.fill_entry ) );
                    // fullname.setLinkTextColor(Color.parseColor("#FE000A"));  you can change text color
                    hintans.setFocusable(true);
                    hintans.requestFocus();

                }else{
                    // if every entry is filled with value then send this data to PHP server

                    ArrayList<String> mylist = new ArrayList<String>();

                    mylist.add(String.valueOf(username.getText().toString()));
                    mylist.add(String.valueOf(password.getText().toString()));
                    mylist.add(String.valueOf(phonenumber.getText().toString()));
                    mylist.add(String.valueOf(hintquestion.getSelectedItem().toString()));
                    mylist.add(String.valueOf(hintans.getText().toString()));

                    new sendUserDetailTOServer().execute(mylist);

                      /*  you can call sendUserDetailTOServer by this way if don't need parameter to pass
                            sendUserDetailTOServer dl = new sendUserDetailTOServer();
                        dl.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
                  */

                }
            }
        });

    }

    public class sendUserDetailTOServer extends AsyncTask< ArrayList<String>, Void, String> {

        private ProgressDialog dialog = new ProgressDialog(MainActivity.this);

        @Override
        protected void onPreExecute() {
            this.dialog.setMessage("Please wait");
            this.dialog.show();
        }

        protected String doInBackground(ArrayList<String>... alldata) {

            ArrayList<String> passed = alldata[0]; //get passed arraylist
            String usnm = passed.get(0);
            String pass = passed.get(1);
            String phone = passed.get(2);
            String hintq = passed.get(3);
            String hingas = passed.get(4);

            // current time
            time = df.format(Calendar.getInstance().getTime());
            date = dt.format(c.getTime());
            try {
                // Log.e(" setup Activity ", "  user detail to server " + " "+ SendName+" "+Sendmobile+" "+Checkgender);
                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

                nameValuePairs.add(new BasicNameValuePair("username", usnm ));
                nameValuePairs.add(new BasicNameValuePair("password", pass));
                nameValuePairs.add(new BasicNameValuePair("phonenumber",  phone));
                nameValuePairs.add(new BasicNameValuePair("hintq", hintq));
                nameValuePairs.add(new BasicNameValuePair("hintanswer", hingas));
                nameValuePairs.add(new BasicNameValuePair("date", date));
                nameValuePairs.add(new BasicNameValuePair("time", time));

                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://blueappsoftware.in/android/tutorial/StoreUserData.php");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs ,"UTF-8")); // UTF-8  support multi language
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
                //     Log.e("pass 1", "connection success ");
            }
            catch(Exception e)
            {
                //  Log.e("Fail 1", e.toString());
                //  Log.d("setup Activity ","  fail 1  "+e.toString());
            }

            try
            {
                BufferedReader reader = new BufferedReader (new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                while ((line = reader.readLine()) != null)
                {
                    sb.append(line + "\n");
                }
                is.close();
                result = sb.toString();
                // Log.d("pass 2", "connection success " + result);
            }
            catch(Exception e)
            {
                //  Log.e("Fail 2", e.toString());
                //  Log.e("setup Activity  "," fail  2 "+ e.toString());
            }
            return result;
        }

        @Override
        protected void onPostExecute(String result) {
            //  Log.e(" setup acc ","  signup result  " + result);
            if (dialog.isShowing()) {
                dialog.dismiss();
            }

            try
            {
                JSONObject json_data = new JSONObject(result);
                code=(json_data.getInt("Tripcode"));
                //   Log.d("pass 3", "connection success " + result);
                if(code==1)
                {
                    try {
                        String Res_username =json_data.getString("Res_username");
                        String Res_password =json_data.getString("Res_password");

                        Intent nextScreen = new Intent(getApplicationContext(), HomeScreen.class);
                        nextScreen.putExtra("username", Res_username );
                        nextScreen.putExtra("password", Res_password);
                        //Sending data to another Activity
                        startActivity(nextScreen);

                    }catch (Exception e){

                    }
                }


            }
            catch(Exception e)
            {
                LoginError(" Network Problem , Please try again");
                //    Log.e("Fail 3 main result ", e.toString());
                // Log.d(" setup Activity "," fail 3 error - "+ result );
            }
        }

    }

    // you can display error in activity_main layout file .. but from better GUI we using Popup type error box.
    public void LoginError(String msg ){

        ///////////
        LayoutInflater li = LayoutInflater.from(getApplicationContext());
        final View prompt = li.inflate(R.layout.loginerrorbox, null);
        final android.support.v7.app.AlertDialog.Builder alertDialogBuilder = new android.support.v7.app.AlertDialog.Builder(this);

        alertDialogBuilder.setView(prompt);
        alertDialogBuilder.setMessage( msg);


        // positive button  --right side
        alertDialogBuilder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

                dialog.cancel();
            }
        });

        alertDialogBuilder.show();

    }

}

Inside doInBackground(ArrayList… alldata) we will again retrieve value from mylist( ArrayList ).Because we are using ArrayList which is like “phonenumber” =” 123456″ where phonenumber is ID for 123456. These IDs are used in PHP to fetch each data value. So we have to assign an ID to each data value. Remember NameValuePair method is included in httpclient library. So make sure to add httpclient dependency on gradle file(app module). Otherwise it show “can’t resolved method” error.

Create Database table to store user details.

Now we will do Server side coding and table creating task. First we will create SQL database table using PHPMyAdmin. Please watch below mansion video. Follow all the step describe in this video. Remember There are two type of hosting provider -1) Window hosting 2) Linux Hosting.I am using Linux hosting which provides CPanal. If you are using windows hosting, Database & table creation task is same for both type of Hosting plan windows & linux. If you are going to purchase hosting i will suggest you to buy Linux hosting. CPanel providers lot of option as you require for website development.

 

Create Database & table using PHPmyAdmin

 

Create PHP Page to accept data from android client.

Now create php page which will receive data from android app. The name of php file will StoreUserData.php. See android code where user data are send to this URL “http://blueappsoftware.in/android/tutorial/StoreUserData.php. In StoreUserData.php file first store all value in a variable. Then use simple SQL INSERT query for storing data into table.

StoreUserData.php

<?php
	include('db_connection.php'); 

   global $conn ;
try{
	mysqli_set_charset($conn, 'utf8');

	$username =stripslashes($_REQUEST['username']);
	$password = stripslashes($_REQUEST['password']);
	$pnumber =htmlentities($_REQUEST['phonenumber']);
	$hintq =stripslashes($_REQUEST['hintq']);
	$hintanswer =stripslashes($_REQUEST['hintanswer']);
	$time =htmlentities($_REQUEST['time']);
	$date =htmlentities($_REQUEST['date']);
 
if (!empty($pnumber)){

	// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
	}

	$stmt = $conn->prepare("INSERT INTO sendDataToPHP (username,password,phonenumber,hintquestion,hintanswer,date,time) VALUES (?,?,?,?,?,?,?)");

    $stmt->bind_param("sssssss", $username, $password, $pnumber, $hintq, $hintanswer, $date, $time);

	$stmt->execute();

    	$flag['Tripcode']=1 ;
	$flag['Res_username'] = $username ;
	$flag['Res_password'] = $password ;

	print(json_encode($flag));    

}// if close

}
catch(PDOException $e)
    {
    echo "Error: " . $e->getMessage();
    }
?>
<?php

define('HOST','your hosting server');
define('USER','your username');
define('PASS','your password');
define('DB','your database name');


$conn = new mysqli(HOST, USER, PASS, DB);
 
// check connection
if ($conn->connect_error) {
  trigger_error('Database connection failed: '  . $conn->connect_error, E_USER_ERROR);
}
?>

Run App in Real Device using USB Debugging

There you can see then user type username, password & other details and hit submit button request sent to php server page. In Response to request from user PHP server reply with username & password which user has written in android app form.

 

Run code in Emulator OR in Real Device

 

Login & Download source code

download-code350-100

 




Download Source Code

* indicates required



Posted in andorid.

I Am Post Graduation (M.Tech. C.S.E) from VNIT, Nagpur. I Have Published Two Research Paper On International Journal. My Apps on Google Play Store- Sanyukt Parivar(Mp Police ), NOTOtag- Digital Chhindwara, The Tubby-VoiceRecognizer & More.
Contact me at kamal.bunkar@blueappsoftware.in

33 Comments

  1. I love your blog.. very nice colors & theme. Did you create this
    website yourself or did you hire someone to do it for you?
    Plz respond as I’m looking to create my own blog and would like to find
    out where u got this from. appreciate it

  2. Pretty great post. I just stumbled upon your weblog and wanted to say
    that I’ve truly loved browsing your blog posts.
    In any case I’ll be subscribing for your feed and I hope you write once more very soon!

  3. Hi there! This post could not be written any better!
    Reading through this post reminds me of my good old room mate!
    He always kept talking about this. I will forward this article to him.
    Fairly certain he will have a good read. Thank you for sharing!

  4. Hi there! Quick question that’s totally off topic.
    Do you know how to make your site mobile friendly?
    My weblog looks weird when browsing from my iphone4.
    I’m trying to find a template or plugin that might
    be able to fix this issue. If you have any recommendations, please share.
    Thank you!

  5. This is really attention-grabbing, You are an overly skilled blogger.
    I have joined your feed and look forward to in the hunt
    for extra of your great post. Also, I have shared your site in my social networks

  6. I’m really enjoying the theme/design of your blog.

    Do you ever run into any browser compatibility issues?

    A few of my blog audience have complained about my site not
    working correctly in Explorer but looks great in Chrome.
    Do you have any solutions to help fix this issue?

  7. I was recommended this web site by my cousin. I’m
    not sure whether this post is written by him as no one else
    know such detailed about my problem. You are wonderful!

    Thanks!

  8. Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog that automatically tweet my newest twitter updates.
    I’ve been looking for a plug-in like this for quite some time and was hoping maybe you would have some experience with something like this.
    Please let me know if you run into anything. I truly enjoy reading your
    blog and I look forward to your new updates.

  9. Having read this I thought it was very informative. I appreciate you finding the time and
    energy to put this short article together. I once again find myself personally spending a lot of time both reading and posting comments.
    But so what, it was still worthwhile!

  10. hi! may i know is your code complete? because i run the program and does nothing, i have download the given source code.

    • Yes this code is working…You have to create file on php server to store FCM key into your database for future use. First check on your android studio log whether FCM token is printing OR not. If it is printing in log than send token to your web server.

  11. Good day! I could have sworn I’ve been to
    this website before but after going through
    a few of the articles I realized it’s new to me.

    Nonetheless, I’m certainly delighted I found it and I’ll be book-marking it and checking back regularly!

  12. Spot on with this write-up, I absolutely feel this website needs much more attention. I’ll probably be returning to read
    through more, thanks for the info!

  13. Hey very cool website!! Man .. Excellent ..
    Amazing .. I will bookmark your site and take the feeds additionally?
    I am glad to search out numerous useful info here
    in the submit, we need work out more strategies
    on this regard, thanks for sharing. . . . . .

  14. Pingback: ExoPlayer Android Example- Best Alternative of VideoView By Kamal

  15. Pingback: Simplest way to get WordPress Post in Android App- REST API

  16. I just like the helpful information you supply to your articles.

    I’ll bookmark your blog and test once more here frequently.
    I’m fairly sure I will learn many new stuff proper here!
    Good luck for the following!

Comments are closed.