通过google日历API android同时添加事件和读取事件

通过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

我正在尝试制作一个应用程序,可以从用户输入中写入谷歌日历事件,也可以从我的谷歌日历中读取事件列表。我试图寻找许多例子,但其中大多数只显示了非常基本的例子

我正在使用alertdialog从用户获取输入,并希望将数据发送到AsyncTask。我想我错的地方是在
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(无效…参数){
试一试{
文科硕士