這次的寫法跟以往不同,是經由 Google問卷的方式寫入SpreadSheet
不過只能新增,沒有辦法做更新修改及刪除動作。
- 第一步,先建立Google問卷,建立兩個問題
- 到預覽表單按右鍵->檢視網頁原始碼
- 原始碼中,
- 搜尋 <form,複製action中的字串
- 搜尋 entry,第一個TextBox,如上圖的TestName,複製 entry.XXXXX
- 搜尋 entry,第二個TextBox,如上圖的Test,複製 entry.XXXXX
- 完成後建立回應目的地->SpreadSheet(回應)
舊版介面
新版介面
Android Studio
AndroidManifest.xml
- 新增權限
<uses-permission android:name="android.permission.INTERNET" />
Layout
<CheckBox
android:id="@+id/question_cats_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Do you like cats?"
android:layout_marginTop="33dp"
android:layout_below="@+id/editText"
android:layout_alignParentStart="true"
android:checked="false" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_marginTop="27dp"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Your Name"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_marginEnd="31dp"
android:layout_marginTop="30dp"
android:layout_below="@+id/question_cats_input"
android:layout_alignParentEnd="true" />
Java
- 除MainActivty,需新增一項 Java Class,Farmer命名為QuestionsSpreadsheetWebService
QuestionsSpreadsheetWebService
- 將之前紀錄的<form id Ex. https://docs.google.com/forms/d/e/ID
及TextBox (entry.XXXX) Key In
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
public interface QuestionsSpreadsheetWebService {
//<form id Ex. https://docs.google.com/forms/d/e/ID
@POST("1FAIpQLSdiO0IX-_wqnsNE6-cw/formResponse")
@FormUrlEncoded
Call<Void> completeQuestionnaire(
//所需KeyIn的表格
@Field("entry.568800221") String name,
@Field("entry.707940740") String answerQuestionCat
);
}
MainActivty
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class MainActivity extends AppCompatActivity {
private EditText nameInputField;
private CheckBox catQuestionInputField;
private Button Btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nameInputField = (EditText) findViewById(R.id.editText);
catQuestionInputField = (CheckBox) findViewById(R.id.question_cats_input);
Btn = (Button) findViewById(R.id.button);
Btn = (Button) findViewById(R.id.button);
Retrofit retrofit = new Retrofit.Builder()
//<form id前的部分
.baseUrl("https://docs.google.com/forms/d/e/")
.build();
final QuestionsSpreadsheetWebService spreadsheetWebService = retrofit.create(QuestionsSpreadsheetWebService.class);
Btn.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
String nameInput = nameInputField.getText().toString();
String catQuestionInput = String.valueOf(catQuestionInputField.isChecked());
Call<Void> completeQuestionnaireCall = spreadsheetWebService.completeQuestionnaire(nameInput, catQuestionInput);
completeQuestionnaireCall.enqueue(callCallback);
}
}
);
}
private final Callback<Void> callCallback = new Callback<Void>() {
@Override
public void onResponse(Response<Void> response) {
Log.d("XXX", "Submitted. " + response);
}
@Override
public void onFailure(Throwable t) {
Log.e("XXX", "Failed", t);
}
};
}
注意
Need include retrofit2 (retrofit-2.0.0-beta3) 點我下載
將 retrofit-2.0.0-beta3.jar 複製到 專案底下,右鍵 Add as lib ,
加入後應該沒有問題,若studio顯示 okhttp 問題時,
則點擊 Gradle Scripts->bulid.gradle(Module: app)
在 dependencies 中加入,
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'
並刪除
compile files('專案路徑/retrofit-2.0.0-beta3.jar')
基本上重新Sync Now 即可正常開啟
若還有 okhttp 問題 點我下載 okhttp.xml
放置專案下 (\.idea\libraries)
重新開啟,重新編譯,基本上就沒有問題
參考資料
Send app data to a web spreadsheet (Google Sheets)
Retrofit
用 Retrofit 2 简化 HTTP 请求
Retrofit2.0使用详解
放置專案下 (\.idea\libraries)
重新開啟,重新編譯,基本上就沒有問題
參考資料
Send app data to a web spreadsheet (Google Sheets)
Retrofit
用 Retrofit 2 简化 HTTP 请求
Retrofit2.0使用详解
你好,請問這是否有不透過問卷的做法,就可以將資料寫入?
回覆刪除現在我也不清楚google有沒有重新開啟api應用
刪除之前google api是可以直接存取,但我在做的時候就取消這塊了