我的目标是拥有某种长期访问令牌,以便我的Android应用程序可以在当天阅读用户Google日历的事件,而无需每次都获得用户批准.
我能够生成 - 我认为是 - 一次性授权代码; 但是,当我将此发送到我的服务器端,应用程序引擎时,我收到以下错误响应:
400 OK
{
"error" : "invalid_grant",
"error_description" : "Code was already redeemed."
}
这是被抛出的异常.我只是抓住它并将其作为一种调试方式发回给自己.
我得到的一次性代码以4/VUr开头,所以我假设它是一次性代码而不是常规访问令牌.
目前,在Android上,我允许用户使用Google+登录,以便我拥有自己的电子邮件地址.从那里我使用以下代码请求一次性授权代码:
try {
Bundle appActivities = new Bundle();
appActivities.putString(GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES, "http://schemas.google.com/AddActivity");
String scopes = "oauth2:server:client_id:" + Constants.SERVER_CLIENT_ID + ":api_scope:https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/calendar";
//Plus.SCOPE_PLUS_LOGIN + " " + CalendarScopes.CALENDAR_READONLY;
String acctName = "myGmail";
String token = GoogleAuthUtil.getToken(getApplicationContext(), acctName, scopes, appActivities);
} catch (UserRecoverableAuthException e) {
startActivityForResult(e.getIntent(), 257/*REQUEST_AUTHORIZATION/*/);
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这段代码来自这里,似乎这就是我必须做的.
然后我将此代码发送到我的App …
google-app-engine android google-calendar-api google-plus google-oauth
我想创建一个可以动态添加方法并允许多个参数的类.
例如:
r = Robot.new
r.learn_maneuvering('turn') { |degree| puts "turning #{degree} degrees" }
r.turn 50 # => turning 50 degrees
r.turn 50, 60 # => turning 50 degrees # => turning 60 degrees
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试是这样的:
def learn_maneuvering(name, &block)
define_singleton_method(name, &block)
end
Run Code Online (Sandbox Code Playgroud)
但是,它只占一个参数..
然后我开始:
def learn_maneuvering(name, &block)
define_singleton_method(name) do |*args|
# to do
end
end
Run Code Online (Sandbox Code Playgroud)
我相信这会循环直到所有参数都被正确使用?Anywho,我不知道如何将这些参数传递给给定的块.
以下是我所面临问题的一个小规模示例.在下面的例子中我使用int指针,但在我自己的代码中,我真的使用指向另一个类的指针.
我确实需要/希望能够将多个指针传递给同一个方法,我真的不想为每个指针编写特定的方法.当我运行代码时,我当然没有得到预期的结果.
我想我已经缩小了问题范围,但我不确定如何解决它.由于C++中的所有内容都是按值传递的,因此我传递的指针需要通过引用传递.我确实尝试在下面的方法中通过引用更改我的方法来调用:
int** getIntPointer() {return &p1;}
Run Code Online (Sandbox Code Playgroud)
void initializeP1(int **&ip,int n)
和 void initializeP1(int **ip,int n)
但似乎没有任何效果.
有没有人知道如何解决这个问题?
谢谢
#include <iostream>
using namespace std;
class Test {
private:
int *p1;
int *p2;
int sizeP1;
int sizeP2;
public:
int** getIntPointer() {return &p1;}
void initializeP1(int **&ip,int n){
sizeP1=n;
*ip=new int[n];
for(int i=0;i<n;i++)
*ip[i]=i;
}
void printP1() {
for(int i=0;i<sizeP1;i++)
cout<<p1[i]<<" ";
}
};
int main() {
Test t;
int** p = t.getIntPointer();
t.initializeP1(*&p,10);
t.printP1();
return 0;
}
Run Code Online (Sandbox Code Playgroud)