通过google日历API android同时添加事件和读取事件
我正在尝试制作一个应用程序,可以从用户输入中写入谷歌日历事件,也可以从我的谷歌日历中读取事件列表。我试图寻找许多例子,但其中大多数只显示了非常基本的例子 我正在使用alertdialog从用户获取输入,并希望将数据发送到AsyncTask。我想我错的地方是在通过google日历API android同时添加事件和读取事件,android,android-asynctask,calendar,google-calendar-api,Android,Android Asynctask,Calendar,Google Calendar Api,我正在尝试制作一个应用程序,可以从用户输入中写入谷歌日历事件,也可以从我的谷歌日历中读取事件列表。我试图寻找许多例子,但其中大多数只显示了非常基本的例子 我正在使用alertdialog从用户获取输入,并希望将数据发送到AsyncTask。我想我错的地方是在mActivity.updateResultsText1(createEvent()) 这是我的日历活动代码 public class CalendarActivity extends FragmentActivity implements
mActivity.updateResultsText1(createEvent())
这是我的日历活动代码
public class CalendarActivity extends FragmentActivity implements OnClickListener {
private ListView listevent;
private Button addeventbtn;
private Button deleteeventbtn;
public String nama, tanggal, mulai, beres;
private ArrayAdapter<String> adapter;
List<String> eventlist =new ArrayList<String>();
com.google.api.services.calendar.Calendar mService;
GoogleAccountCredential credential;
private TextView mStatusText;
final HttpTransport transport = AndroidHttp.newCompatibleTransport();
final JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
static final int REQUEST_ACCOUNT_PICKER = 1000;
static final int REQUEST_AUTHORIZATION = 1001;
static final int REQUEST_GOOGLE_PLAY_SERVICES = 1002;
private static final String PREF_ACCOUNT_NAME = "accountName";
private static final String[] SCOPES = { CalendarScopes.CALENDAR };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calendar);
listevent=(ListView)findViewById(R.id.kalenderlist);
addeventbtn=(Button) findViewById(R.id.addeventbutton);
addeventbtn.setOnClickListener(this);
deleteeventbtn=(Button)findViewById(R.id.deleteevent);
deleteeventbtn.setOnClickListener(this);
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,eventlist);
mStatusText = (TextView)findViewById(R.id.statustext);
mStatusText.setTypeface(null, Typeface.BOLD);
mStatusText.setText("Retrieving data...");
// Initialize credentials and service object.
SharedPreferences settings = getPreferences(Context.MODE_PRIVATE);
credential = GoogleAccountCredential.usingOAuth2(
getApplicationContext(), Arrays.asList(SCOPES))
.setBackOff(new ExponentialBackOff())
.setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));
mService = new com.google.api.services.calendar.Calendar.Builder(
transport, jsonFactory, credential)
.setApplicationName("Google Calendar API Android")
.build();
}
public void onClick(View v) {
if (v.getId()==R.id.addeventbutton) {
AlertDialog.Builder addeventdialog = new AlertDialog.Builder(CalendarActivity.this);
View mViewaddevent = getLayoutInflater().inflate(R.layout.activity_addevent,null);
final EditText namaevent=(EditText)mViewaddevent.findViewById(eventname);
final EditText tanggalevent=(EditText)mViewaddevent.findViewById(eventdate);
final EditText mulaievent=(EditText)mViewaddevent.findViewById(R.id.eventtimestart);
final EditText beresevent=(EditText)mViewaddevent.findViewById(R.id.eventtimeend);
addeventdialog.setView(mViewaddevent);
final AlertDialog dialog = addeventdialog.create();
dialog.show();
Button addbutton=(Button)mViewaddevent.findViewById(R.id.eventsavebutton);
addbutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (!namaevent.getText().toString().isEmpty()&&!tanggalevent.getText().toString().isEmpty()&&!mulaievent.getText().toString().isEmpty()&&!beresevent.getText().toString().isEmpty()){
nama = namaevent.getText().toString();
tanggal = tanggalevent.getText().toString();
mulai = mulaievent.getText().toString();
beres = beresevent.getText().toString();
dialog.dismiss();
}
else {
Toast.makeText(CalendarActivity.this,"Masukan tidak lengkap",Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}
});
Button cancelbtn=(Button)mViewaddevent.findViewById(R.id.eventcancelbutton);
cancelbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
}
if (v.getId()==R.id.deleteevent) {
}
}
public void updateResultsText(final List<String> dataStrings) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (dataStrings == null) {
mStatusText.setText("Error retrieving data!");
} else if (dataStrings.size() == 0) {
mStatusText.setText("No data found.");
} else {
mStatusText.setText("Data retrieved using" +
" the Google Calendar API:");
eventlist.addAll(dataStrings);
listevent.setAdapter(adapter);
}
}
});
}
public void updateResultsText1(final String dataStrings1) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (dataStrings1 == null) {
mStatusText.setText("Error retrieving data!");
} else if (dataStrings1 == "") {
mStatusText.setText("No data found.");
} else {
mStatusText.setText("Data retrieved using" +
" the Google Calendar API:");
}
}
});
}
公共类CalendarActivity扩展FragmentActivity实现OnClickListener{
私有ListView listevent;
专用按钮addeventbtn;
专用按钮deleteeventbtn;
公共字符串nama、tanggal、mulai、beres;
专用阵列适配器;
List eventlist=new ArrayList();
com.google.api.services.calendar.calendar mService;
谷歌会计凭证;
私有文本视图mStatusText;
final HttpTransport transport=AndroidHttp.newCompatibleTransport();
final JsonFactory JsonFactory=GsonFactory.getDefaultInstance();
静态最终整数请求\帐户\选择器=1000;
静态最终int请求_授权=1001;
静态最终整数请求\谷歌\播放\服务=1002;
私有静态最终字符串PREF\u ACCOUNT\u NAME=“accountName”;
私有静态最终字符串[]SCOPES={CalendarScopes.CALENDAR};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u日历);
listevent=(ListView)findViewById(R.id.kalenderlist);
addeventbutton=(按钮)findViewById(R.id.addeventbutton);
addeventbtn.setOnClickListener(此);
deleteeventbtn=(按钮)findViewById(R.id.deleteevent);
deleteeventbtn.setOnClickListener(此);
adapter=newarrayadapter(这是android.R.layout.simple\u list\u item\u 1,eventlist);
mStatusText=(TextView)findViewById(R.id.statustext);
mStatusText.setTypeface(null,Typeface.BOLD);
setText(“检索数据…”);
//初始化凭据和服务对象。
SharedReferences设置=getPreferences(Context.MODE\u PRIVATE);
凭证=GoogleAccountCredential.UsingAuth2(
getApplicationContext(),Arrays.asList(作用域))
.setBackOff(新的指数backoff())
.setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME,null));
mService=new com.google.api.services.calendar.calendar.Builder(
运输、jsonFactory、凭证)
.setApplicationName(“谷歌日历API Android”)
.build();
}
公共void onClick(视图v){
if(v.getId()==R.id.addeventbutton){
AlertDialog.Builder addeventdialog=新建AlertDialog.Builder(CalendarActivity.this);
查看mViewaddevent=GetLayoutFlater()。充气(R.layout.activity_addevent,null);
final EditText namaevent=(EditText)mViewaddevent.findViewById(eventname);
final EditText tanggalevent=(EditText)mViewaddevent.findViewById(eventdate);
final EditText MulaieEvent=(EditText)mViewaddevent.findViewById(R.id.eventtimestart);
final-EditText-beresevent=(EditText)mViewaddevent.findViewById(R.id.eventtimeend);
addeventdialog.setView(mViewaddevent);
final AlertDialog dialog=addeventdialog.create();
dialog.show();
Button addbutton=(Button)mViewaddevent.findViewById(R.id.eventsavebutton);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图){
如果(!namaevent.getText().toString().isEmpty()&&!tanggalevent.getText().toString().isEmpty()&&!MulaieEvent.getText().toString().isEmpty()&!beresevent.getText().toString().isEmpty()){
nama=namaevent.getText().toString();
tanggal=tanggalevent.getText().toString();
mulai=mulaievent.getText().toString();
beres=beresevent.getText().toString();
dialog.dismise();
}
否则{
Toast.makeText(CalendarActivity.this,“Masukan tidak lengkap”,Toast.LENGTH_SHORT.show();
dialog.dismise();
}
}
});
Button cancelbtn=(Button)mViewaddevent.findViewById(R.id.eventcancelbutton);
cancelbtn.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图){
dialog.dismise();
}
});
}
if(v.getId()==R.id.deleteevent){
}
}
public void updateResultsText(最终列表数据字符串){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
如果(数据字符串==null){
mStatusText.setText(“检索数据时出错!”);
}else if(dataStrings.size()==0){
mStatusText.setText(“未找到数据”);
}否则{
mStatusText.setText(“使用+
“谷歌日历API:”;
addAll(数据字符串);
setAdapter(适配器);
}
}
});
}
public void updateResultsText1(最终字符串dataStrings1){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
if(dataStrings1==null){
mStatusText.setText(“检索数据时出错!”);
}else if(dataStrings1==“”){
mStatusText.setText(“未找到数据”);
}否则{
mStatusText.setText(“使用+
“谷歌日历API:”;
}
}
});
}
这是我的异步任务代码
public class ApiAsyncTask extends AsyncTask<Void, Void, String> {
private CalendarActivity mActivity;
ApiAsyncTask(CalendarActivity activity) {
this.mActivity = activity;
}
@Override
protected String doInBackground(Void... params) {
try {
mActivity.clearResultsText();
mActivity.updateResultsText(getDataFromApi());
mActivity.updateResultsText1(createEvent());
} catch (final GooglePlayServicesAvailabilityIOException availabilityException) {
mActivity.showGooglePlayServicesAvailabilityErrorDialog(
availabilityException.getConnectionStatusCode());
} catch (UserRecoverableAuthIOException userRecoverableException) {
mActivity.startActivityForResult(
userRecoverableException.getIntent(),
CalendarActivity.REQUEST_AUTHORIZATION);
} catch (IOException e) {
mActivity.updateStatus("The following error occurred: " +
e.getMessage());
}
return null;
}
private List<String> getDataFromApi() throws IOException {
// List the next 20 events from the primary calendar.
DateTime now = new DateTime(System.currentTimeMillis());
List<String> eventStrings = new ArrayList<String>();
Events events = mActivity.mService.events().list("primary")
.setMaxResults(20)
.setTimeMin(now)
.setOrderBy("startTime")
.setSingleEvents(true)
.execute();
List<Event> items = events.getItems();
for (Event event : items) {
DateTime start = event.getStart().getDateTime();
if (start == null) {
// All-day events don't have start times, so just use
// the start date.
start = event.getStart().getDate();
}
eventStrings.add(
String.format("%s (%s)", event.getSummary(), start));
}
return eventStrings;
}
private String createEvent() throws IOException {
Event event2 = new Event()
.setSummary(mActivity.nama);
DateTime startDateTime = new DateTime(mActivity.tanggal+"T"+mActivity.mulai+":00+07:00");
EventDateTime start = new EventDateTime()
.setDateTime(startDateTime)
.setTimeZone("Asia/Jakarta");
event2.setStart(start);
DateTime endDateTime = new DateTime(mActivity.tanggal+"T"+mActivity.beres+":00+07:00");
EventDateTime end = new EventDateTime()
.setDateTime(endDateTime)
.setTimeZone("Asia/Jakarta");
event2.setEnd(end);
String[] recurrence = new String[] {"RRULE:FREQ=DAILY;COUNT=1"};
event2.setRecurrence(Arrays.asList(recurrence));
String calendarId = "primary";
try {
event2 = mActivity.mService.events().insert(calendarId, event2).execute();
} catch (IOException e) {
e.printStackTrace();
}
System.out.printf("Event created: %s\n", event2.getHtmlLink());
Log.e("Event", "created : " + event2.getHtmlLink());
String eventStrings = "created : " + event2.getHtmlLink();
return eventStrings;
}
公共类ApiAsyncTask扩展了AsyncTask{
私人活动能力;
APIsyncTask(日历活动){
这个。活动=活动;
}
@凌驾
受保护字符串doInBackground(无效…参数){
试一试{
文科硕士