API Lịch Google của Android nhận thông tin đăng nhập [trùng lặp]
Dec 21 2020
Tôi muốn phát triển một ứng dụng sẽ truy cập API Lịch Google, trong số những thứ khác.
Người dùng ứng dụng sau đó cũng có thể truy cập các sự kiện. Nhưng rất tiếc, tôi không thể truy cập bằng mã của mình. Tôi cũng đã làm theo hướng dẫn từ Google Calendar API Java Quickstart .
Đây là mã của tôi:
public class GoogleCalendar {
private static final String APPLICATION_NAME = "Google Calendar Quickstart";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String TOKENS_DIRECTORY_PATH = "tokens";
/**
* Global instance of the scopes required by this quickstart.
* If modifying these scopes, delete your previously saved saved tokens/ folder.
*/
private static final List<String> SCOPES = Collections.singletonList(CalendarScopes.CALENDAR_READONLY);
private static final String CREDENTIALS_FILE_PATH = "/credential.json";
/**
* Creates an authorized Credential objects.
* @param HTTP_TRANSPORT The network HTTP Transport
* @return An authorized Credential object.
* @throws IOException If the client_id.jason file cannot be found.
*/
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
// Load client secrets.
InputStream in = GoogleCalendar.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
if (in == null) {
throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
}
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
.setAccessType("offline")
.build();
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}
public static void getAllData() throws GeneralSecurityException, IOException {
// Build a new authorized API client service.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Calendar service = new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
// List the next 10 event from the primary calendar.
DateTime now = new DateTime(System.currentTimeMillis());
Events events = service.events().list("primary")
.setMaxResults(10)
.setTimeMin(now)
.setOrderBy("startTime")
.setSingleEvents(true)
.execute();
List<Event> items = events.getItems();
if (items.isEmpty()) {
System.out.println("No upcoming events found.");
} else {
System.out.println("Upcoming events");
for (Event event : items) {
DateTime start = event.getStart().getDateTime();
if (start == null) {
start = event.getStart().getDate();
}
System.out.printf("%s (%s)\n", events.getSummary(), start);
}
}
}
}
Và đây là thông báo lỗi của tôi: java.security.KeyStoreException: JKS not found
Tôi đã gọi phương thức get all data trong một lớp khác với:
try {
GoogleCalendar.getAllData();
} catch (GeneralSecurityException | IOException e) {
e.printStackTrace();
}
Nếu bạn có bất kỳ câu hỏi nào về thông tin còn thiếu, vui lòng cho tôi biết và tôi sẽ chuyển thông tin.
Cảm ơn bạn trước.
Trả lời
JayRathodRJ Dec 21 2020 at 18:00
Đây là vấn đề đã biết, tôi nghĩ bạn có thể tìm thấy câu trả lời trên trình theo dõi vấn đề của google .
Chỉ cần thay thế này
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Với cái này
HTTP_TRANSPORT = new com.google.api.client.http.javanet.NetHttpTransport()