我试图通过Facebook(sdk 4.0)登录我的Android应用程序后获取用户的电子邮件地址.我读过很多帖子都在问同样的事情,但我仍然无法让它发挥作用.我只需使用代码登录用户
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends", "email"));
Run Code Online (Sandbox Code Playgroud)
然后我用.做了Graph API请求
LoginManager.getInstance().registerCallback(fbCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
System.out.println(loginResult.getAccessToken().toString());
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
System.out.println(object.toString());
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "email");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
Run Code Online (Sandbox Code Playgroud)
输出就是
{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[public_profile, contact_email, user_friends, email, basic_info]}
{"id":"xxxxxxxxxxxxxxx"}
Run Code Online (Sandbox Code Playgroud)
即使我删除了"fields"部分,我也会获得一个带有一堆用户公共信息的JSON,但从未收到电子邮件字段.我正在我自己的Facebook帐户上测试这个,我确实有一个与之关联的电子邮件地址.
我的Java类代表数据库中的实体,我发现覆盖equals我的类的方法以通过id进行比较是切实可行的.所以例如在我的Transaction课堂上我有这段代码
@Override
public boolean equals(Object other){
if (other == null) return false;
if (other == this) return true;
if (!(other instanceof Transaction))return false;
Transaction otherTrans = (Transaction) other;
if (id == null || otherTrans.id == null) return false;
return id.equals(otherTrans.id);
}
Run Code Online (Sandbox Code Playgroud)
现在,对我来说似乎有点难看,每个类都拥有相同的代码片段,只更改了类的名称.我想让我的类扩展一个超类MyEntity,我会编写上面的方法,替换instanceof Transaction为类似的东西instanceof this.getClass(),但这似乎不可能.我也想过用它代替它instanceof MyEntity,但这意味着两个对象可以被认为是相等的,即使它们属于不同的类,只要它们具有相同的id.还有其他方法吗?
我正在学习c ++而且我遇到了一些我无法解释的行为.下面的两段代码提供了不同的结果,而我希望它们是等价的:
success = true;
vector<instruction>::const_iterator i;
for (i = instructions.begin(); i != instructions.end(); ++i) {
bool up = update(*i);
success = success && up;
}
Run Code Online (Sandbox Code Playgroud)
和
success = true;
vector<instruction>::const_iterator i;
for (i = instructions.begin(); i != instructions.end(); ++i) {
success = success && update(*i);
}
Run Code Online (Sandbox Code Playgroud)
我的印象是第二个版本总是采用迭代器的初始值.有人可以解释一下原因吗?
我正在使用标准代码
URL url = new URL(sb.toString());
conn = (HttpsURLConnection) url.openConnection();
InputStreamReader in = new InputStreamReader(conn.getInputStream());
Run Code Online (Sandbox Code Playgroud)
从Android客户端连接到Google Places API.但是我得到了这个例外:
02-24 02:29:35.535: E/AdapterClass(3122): at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:374)
02-24 02:29:35.535: E/AdapterClass(3122): at com.android.okhttp.Connection.upgradeToTls(Connection.java:197)
02-24 02:29:35.535: E/AdapterClass(3122): Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xaf85c200: Failure in SSL library, usually a protocol error
02-24 02:29:35.535: E/AdapterClass(3122): error:1407743E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert inappropriate fallback (external/openssl/ssl/s23_clnt.c:765 0xac3f9e61:0x00000000)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我注意到这只发生在我使用OkHttp请求时,但不是针对此特定请求,而是在我的应用程序的其他部分.那么为什么okhttp会在这里发挥作用(如堆栈跟踪中所示)?
我正在尝试完成简单(理论上......)的任务,让我的Android应用程序的用户向该应用的其他用户付款.似乎Paypal是唯一可行的方法(至少在欧洲),所以我去了他们的网站并找到了他们Android SDK的链接.很酷,但经过一些阅读后发现,这个SDK只允许从用户付款到应用程序的帐户,而不是从用户付款到另一个用户.
所以我做了一些研究,似乎有一种称为移动支付库的功能.很棒,但他们在他们的网站上明确表示这是旧的,并将完全被新的SDK取代.
好的,然后我继续我的研究,发现这些库基于"自适应支付API",这是一组REST API,似乎完全符合我的需要.然而,他们的文档似乎是为浏览器而非移动应用程序量身定制的.例如,您需要在网页上登录才能对付款进行身份验证,我宁愿避免使用这种方式来支持完全应用内用户体验.
一句话:花了几个小时阅读了一堆cahotic文档后,我又回到了起点.也许我正在寻找错误的地方,但这应该是一个非常常见的用例,并且想象它需要几行代码和一个像样的库.
所以我问:是否有人能够提供Android活动的工作示例,允许用户通过插入他的Paypal凭证和收件人的电子邮件向另一个用户付款?
我知道这似乎是GIT的重复:如何在切换分支时保持被忽略的文件?,但我在那里找不到答案.
所以我创建了一个带有--orphan标志的新分支,以删除提交历史记录.然后我git rm --cached对所有文件进行了修改,修改.gitignore为忽略其中一些文件,然后添加并提交.正如所料,被忽略的文件不在新的repo中(也不在其任何历史记录中).但是,当我切换分支时它们会消失(也就是说,当我检查旧分支时,然后再次检查新分支).我怎么能避免这种情况?
编辑:整个操作的目的是准备一个项目在GitHub上发布,所以我想隐藏一些包含密码,密钥等私人信息的配置文件.这就是为什么我通过创建一个新的孤儿来删除提交历史科.我知道在添加文件之前提交文件可能.gitignore会解决消失的问题,但这会使文件最终在公共历史记录中可见.git add -f那时我试图这样做,git rm --cached但它没有做到这一点.
假设一个C类继承自B类,它覆盖了A中定义的虚函数.C不会覆盖该函数.当类型A*的指针指向类型C的对象时,函数调用是否会使用B中的重写版本?
对于给定的向量x,我需要获得该类型的数量
expand.grid(x,x,x,x)
Run Code Online (Sandbox Code Playgroud)
其中x重复d次.有没有允许这个的功能?就像是
expand.grids(x,d)
Run Code Online (Sandbox Code Playgroud)
谢谢!
我想从列表开始构建一个数组数组,但是我得到了一个转换异常.谁知道为什么?这是代码
List<String[]> listofarray=new ArrayList<String[]>();
//...filling the list...
String[][] ob= (String[][]) listofarray.toArray();
Run Code Online (Sandbox Code Playgroud) android ×3
java ×3
c++ ×2
arraylist ×1
casting ×1
facebook ×1
git ×1
inheritance ×1
instanceof ×1
overriding ×1
p2p ×1
paypal ×1
r ×1
ssl ×1
string ×1