https://www.crazycodersclub.com/android/using-google-spread-sheet-as-database-part-2-posting-insert-data-into-sheets-from-android-app/
Here It Consists of 2 Parts
Note : create your own script or you can use the script I have published.
Step 1 : Go to App script console and create new project in app script .
Step 2 : Insert the below Code which inserts data to Spread sheet.
function doGet(e){ return handleResponse(e); } //Recieve parameter and pass it to function to handle function doPost(e){ return handleResponse(e); } // here handle with parameter function handleResponse(request) { var output = ContentService.createTextOutput(); //create varibles to recieve respective parameters var name = request.parameter.name; var country = request.parameter.country; var id = request.parameter.id; //open your Spread sheet by passing id var ss= SpreadsheetApp.openById(id); var sheet=ss.getSheetByName("Sheet1"); //add new row with recieved parameter from client var rowData = sheet.appendRow([name,country]); var callback = request.parameters.callback; if (callback === undefined) { output.setContent(JSON.stringify("Success")); } else { output.setContent(callback + "(" + JSON.stringify("Success") + ")"); } output.setMimeType(ContentService.MimeType.JSON); return output; }
Step 3 : Now Publish (Deploy) it as web App with Access to anyone.
Step 4 : Copy the link and save it for further use in Step
you can use post man tool to verify doGet and doPost activities.
Note : Since I am enhancing previous project. You can refer previous part before reading further.
and I have renamed MainActivity.java and main.xml files. Everything else remains same.
Step 1 : Create form.xml to take inputs from user.
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.AppBarLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_marginTop="?attr/actionBarSize" android:orientation="vertical" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="60dp"> <android.support.design.widget.TextInputLayout android:id="@+id/input_layout_name" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/input_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" android:hint="name" /> </android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout android:id="@+id/input_layout_email" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/input_country" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="country" /> </android.support.design.widget.TextInputLayout> <Button android:id="@+id/btn_submit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Submit" android:background="@color/colorPrimary" android:layout_marginTop="40dp" android:textColor="@android:color/white"/> </LinearLayout> </android.support.design.widget.CoordinatorLayout>
Step 2 : Create PostData.java class to handle input and post it into server using deployed web app. Thats it with the requirement.
package androidlabs.gsheets2.Post; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import org.json.JSONObject; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.Iterator; import javax.net.ssl.HttpsURLConnection; import androidlabs.gsheets2.R; public class PostData extends AppCompatActivity { private ProgressDialog progress; TextView tvName; TextView tvCountry; Button button; String name; String country; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.form); button=(Button)findViewById(R.id.btn_submit); tvName=(EditText)findViewById(R.id.input_name); tvCountry=(EditText)findViewById(R.id.input_country); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { name = tvName.getText().toString(); country=tvCountry.getText().toString(); new SendRequest().execute(); } } ); } public class SendRequest extends AsyncTask<String, Void, String> { protected void onPreExecute(){} protected String doInBackground(String... arg0) { try{ URL url = new URL("https://script.google.com/macros/s/AKfycbx-Nu9l0zuZ0olaCeuS5iBHoaLoDEXtQhvw6TmUokuQj_uR7Uw/exec"); // https://script.google.com/macros/s/AKfycbyuAu6jWNYMiWt9X5yp63-hypxQPlg5JS8NimN6GEGmdKZcIFh0/exec JSONObject postDataParams = new JSONObject(); //int i; //for(i=1;i<=70;i++) // String usn = Integer.toString(i); String id= "1hYZGyo5-iFpuwofenZ6s-tsaFPBQRSx9HQYydigA4Dg"; postDataParams.put("name",name); postDataParams.put("country",country); postDataParams.put("id",id); Log.e("params",postDataParams.toString()); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(15000 /* milliseconds */); conn.setConnectTimeout(15000 /* milliseconds */); conn.setRequestMethod("POST"); conn.setDoInput(true); conn.setDoOutput(true); OutputStream os = conn.getOutputStream(); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os, "UTF-8")); writer.write(getPostDataString(postDataParams)); writer.flush(); writer.close(); os.close(); int responseCode=conn.getResponseCode(); if (responseCode == HttpsURLConnection.HTTP_OK) { BufferedReader in=new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer sb = new StringBuffer(""); String line=""; while((line = in.readLine()) != null) { sb.append(line); break; } in.close(); return sb.toString(); } else { return new String("false : "+responseCode); } } catch(Exception e){ return new String("Exception: " + e.getMessage()); } } @Override protected void onPostExecute(String result) { Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show(); } } public String getPostDataString(JSONObject params) throws Exception { StringBuilder result = new StringBuilder(); boolean first = true; Iterator<String> itr = params.keys(); while(itr.hasNext()){ String key= itr.next(); Object value = params.get(key); if (first) first = false; else result.append("&"); result.append(URLEncoder.encode(key, "UTF-8")); result.append("="); result.append(URLEncoder.encode(value.toString(), "UTF-8")); } return result.toString(); } }
But to give UI to select Inserion and View I am adding one more xml and class
Step 3 : Create main_page.xml to add 2 buttons to choose.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" > <Button android:id="@+id/insertUser" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="25dp" android:layout_marginRight="25dp" android:background="#37a8f7" android:text="View User" android:layout_marginTop="15dp" android:textColor="#fff" /> <Button android:id="@+id/viewUser" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="25dp" android:layout_marginRight="25dp" android:background="#37a8f7" android:text="Add User" android:layout_marginTop="15dp" android:textColor="#fff" /> </LinearLayout>
Step 4 : Create MainPage.java to handle buttons. Use Intent objects to Navigate to respective activities.
package androidlabs.gsheets2; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import androidlabs.gsheets2.Post.PostData; /** * Created by ADJ on 2/21/2017. */ public class MainPage extends AppCompatActivity{ Button getData; Button sendData; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_page); getData=(Button)findViewById(R.id.insertUser); sendData=(Button)findViewById(R.id.viewUser); getData.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(getApplicationContext(), UserList.class); startActivity(intent); } }); sendData.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Intent intent = new Intent(getApplicationContext(), PostData.class); startActivity(intent); } }); }; }
Step 5 : Then Modify in manifest file as below by including newly added Classes and change Launching Activity.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="androidlabs.gsheets2"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <application android:icon="@drawable/logo_icon" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".MainPage" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".UserList"> </activity> <activity android:name=".Post.PostData"> </activity> </application> </manifest>