Showing posts with label android volley. Show all posts

Google Form to Android Application


Hi Friends, I will show you how to use Google Forms as Back-End.  For On-line application we have a separate table for feedback from users. But, In off-line applications like Music player we will not connect any databases.
To get real-time feedback we can go for Firebase.

But, Firebase has some CONS:
1.Data stored in JSON like Format.
2.Free account of Firebase has Limitation and for Unlimited Access we have to pay some amount per month.

To avoid these CONS, we can connect Google Forms as Back-end

PROS of using this method:
1.It provides real time user-friendly response
2.Cost Free
3.Easy to Integrate

CREATE A GOOGLE FORM
First thing you need to do is login to drive.google.com and create a new “Google Form”. After Creating your Google Form, get your share link from Forms. Your link looks like below
https://docs.google.com/forms/d/e/1FAIpQLScIpmqndQeQG3lFbj0QkQ1Kt6tEXoPrOt314AZGQ2WKuK8IvA/viewform
This URL needs to be converted to be used for sending data from code. The conversion very easy, just replace “viewform” in the URL to “formResponse”.
Thus, our POST URL becomes
https://docs.google.com/forms/d/e/1FAIpQLScIpmqndQeQG3lFbj0QkQ1Kt6tEXoPrOt314AZGQ2WKuK8IvA/formResponse
The tricky part of using Google Forms to post data for these fields via code, we need to make a POST request with the data attached as key-value pair. Values being the data entered by your user in the app and the keys being the ids of input fields on the form.

To get the keys, right click on each TextBox and select “Inspect Element”. Take Fields name from form and which looks like entry.737865382.

Google Form to Android Application

CODING PART
In this, you have create your android project and Import any HTTP Library. In my sample, I used VOLLEY as my HTTP Library.
AndroidManifest.xml
Add INTERNET Permission in AndroidManifest file in your project.
Internet Permission
<uses-permission android:name="android.permission.INTERNET" />
Layout
Create your Layout file named as activity_main.xml and paste the following code.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.androidmads.postdatatogoogledocs.MainActivity"
    tools:showIn="@layout/activity_main">

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/edtName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Name"
            android:inputType="textPersonName" />
    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/edtPhone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Phone Number"
            android:inputType="phone"
            android:maxLength="10" />
    </android.support.design.widget.TextInputLayout>
</LinearLayout>
Function to post Data:
Following function is used to post data to Google Form
public void postData(final String name, final String phone) {

        progressDialog.show();
        StringRequest request = new StringRequest(
                Request.Method.POST,
                Constants.url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("TAG", "Response: " + response);
                        if (response.length() > 0) {
                            Snackbar.make(fab, "Successfully Posted", Snackbar.LENGTH_LONG).show();
                            edtName.setText(null);
                            edtPhone.setText(null);
                        } else {
                            Snackbar.make(fab, "Try Again", Snackbar.LENGTH_LONG).show();
                        }
                        progressDialog.dismiss();
                    }
                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                progressDialog.dismiss();
                Snackbar.make(fab, "Error while Posting Data", Snackbar.LENGTH_LONG).show();
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put(Constants.nameField, name);
                params.put(Constants.phoneField, phone);
                return params;
            }
        };
        request.setRetryPolicy(new DefaultRetryPolicy(
                50000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        queue.add(request);
    }
you can view your responses in Google form's Response section or in Google sheets. To get response in Google sheet, just click excel symbol in response section of your Google form.

This concept is read from the following link http://codesmith.in/post-data-google-drive-sheet-through-mobile-app/ and this is one of my favourite post I read.
Download Source Code

Download From Github