我的react-native-calendar-events
代码抛出错误,错误是说No calendar has been set
,但我不知道为什么会这样。我的应用的旧版上的相同代码可在相同设备上运行。
export async function createCalendarEvent(event) {
const status = await RNCalendarEvents.authorizationStatus();
console.log(status);
if (status === "authorized" || status === "undetermined") {
addToCalendar(event);
} else {
RNCalendarEvents.authorizeEventStore()
.then(auth => {
// handle status
if (auth === "authorized" || auth === "undetermined") {
addToCalendar(event);
}
})
.catch(() => {
alert("This app needs calendar access");
});
}
}
async function addToCalendar(event) {
try {
const startDate =
Platform.OS === "ios"
? format(parse(event.StartDateLocal))
: parse(event.StartDateLocal);
const endDate =
Platform.OS === "ios"
? format(parse(event.EndDateLocal))
: parse(event.EndDateLocal);
const allEvents = await RNCalendarEvents.fetchAllEvents(startDate, endDate);
const calendarEvent = allEvents.find(e => e.title === event.Title);
if (calendarEvent) {
alert("You have already added this event to your calendar.");
} else {
const title = event.Title;
const {
Location: {
AddressLine1: address,
City: city,
StateAbbreviation: state,
PostalCode: zip
}
} = event;
const location = `${address}, ${city}, ${state}, ${zip}`;
const settings = {
location,
startDate,
endDate
};
RNCalendarEvents.saveEvent(title, settings)
.then(() => {
alert("Event Saved");
})
.catch(rejectionReason => {
console.log(rejectionReason);
alert("Oops! Something has gone wrong.");
});
}
} catch (e) {
alert("Oops! Something has gone wrong with this request.");
}
}
我最近在status === "authorized" || status === "undetermined"
中添加了“或”,这在某种程度上阻止了iOS出现错误时完全崩溃。
我以为这可能是版本问题,但我回到了原来的版本,但仍然有这个问题。所以Promise出错了,但是为什么呢?
我像这样拼凑了一个最小可行的产品:
import React from "react";
import { Text, StyleSheet, View, TouchableOpacity } from "react-native";
import RNCalendarEvents from "react-native-calendar-events";
import parse from "date-fns/parse";
import format from "date-fns/format";
const ComponentsScreen = () => {
async function addToCalendar(event) {
console.log(RNCalendarEvents);
try {
RNCalendarEvents.saveEvent("Title of event", {
startDate: "2016-08-19T19:26:00.000Z",
endDate: "2017-08-19T19:26:00.000Z"
})
.then(() => {
alert("Event Saved");
})
.catch(rejectionReason => {
console.log(rejectionReason);
alert("Oops! Something has gone wrong.");
});
} catch (e) {
alert(e.message);
}
并且RNCalendarEvents
的saveEvent()
方法返回未定义,即使RNCalendarEvents
I控制台日志返回了该API可用的所有方法。我以为这会提示链接问题,但是它应该是自动链接,无论如何我尝试过react-native link
并仍未确定其方法。
我刚刚在调试过程中注意到react-native-calendar-events
仍在使用index.ios.js
。这可能就是为什么我找回RNCalendarEvents
API的方法,但是当我尝试实现它们时,我得到了undefined
。
UPDATE:
我在MainActivity.java
中添加了以下内容:
package com.nfibengage;
import android.os.Bundle;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import org.devio.rn.splashscreen.SplashScreen;
import android.view.MotionEvent;
import com.facebook.react.ReactRootView;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
public class MainActivity extends ReactActivity {
/**
* Returns the name of the main component registered from JavaScript.
* This is used to schedule rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "NFIBEngage";
}
/*
* this is for https://github.com/crazycodeboy/react-native-splash-screen
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
SplashScreen.show(this);
super.onCreate(savedInstanceState);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev);
}
@Override
public void onRequestPermissionResult(int RequestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionResult(RequestCode, permissions, grantResults);
CalendarEventsPackage.onRequestPermissionResult(RequestCode, permissions, grantResults);
}
而且我仍然收到No calendar has been set
的相同错误消息。
所以我想我需要添加导入:import com.calendarevents.CalendarEventsPackage;
。将其添加到MainActivity.java
并再次运行Android模拟器后,在构建时出现以下错误:
错误:方法未从超类型重写或实现方法错误:找不到符号方法onRequestPermissionResult(int,String [],int [])错误:找不到符号方法onRequestPermissionResult(int,String [],int [])
我能够通过从以下位置删除error: method does not override or implement a method from a supertype
来解决第一个错误:@Override
:>
@Override
public void onRequestPermissionResult(int RequestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionResult(RequestCode, permissions, grantResults);
CalendarEventsPackage.onRequestPermissionResult(RequestCode, permissions, grantResults);
}
我的react-native-calendar-events代码抛出一个错误,该错误表明未设置日历,但是我不知道为什么会这样。我的应用的旧版上的相同代码适用于...
我只能通过以下重构使它在iOS上正常工作: