如何正确使用AccessGrant连接到android socialauth提供商
我的android应用程序正在存储来自成功的Socialuth授权的android Socialuth AccessGrant对象。我将其保存在sqlite中,并尝试使用存储的AccessGrant对象来允许一个带有AsycTask的服务连接到提供商(facebook、googleplus等),而不向用户显示登录屏幕。 下面是服务的AsyncTask中的代码段如何正确使用AccessGrant连接到android socialauth提供商,android,android-asynctask,socialauth,Android,Android Asynctask,Socialauth,我的android应用程序正在存储来自成功的Socialuth授权的android Socialuth AccessGrant对象。我将其保存在sqlite中,并尝试使用存储的AccessGrant对象来允许一个带有AsycTask的服务连接到提供商(facebook、googleplus等),而不向用户显示登录屏幕。 下面是服务的AsyncTask中的代码段 AccessGrant currentAccessGrant = new AccessGrant(cn.getKey(),cn.getS
AccessGrant currentAccessGrant = new AccessGrant(cn.getKey(),cn.getSecret());
currentAccessGrant.setProviderId(cn.getProviderId());
currentAccessGrant.setAttributes(cn.getAttributes());
manager = new SocialAuthManager();
try {
//manager.getSocialAuthConfig().load("C:\\Users\\Blair\\Documents\\GitHub\\App3\\app3\\src\\main\\assets\\oauth_consumer.properties");
//manager.getSocialAuthConfig().load();
manager.getSocialAuthConfig();
} catch(Exception e) {
Log.e(DEBUG_TAG, "SocialAuthConfig.load Exception", e);
}
if (cn.getProviderId().equals("googleplus")) {
Log.d(DEBUG_TAG, "Setting googleplus");
//currentAdapter.addProvider(SocialAuthAdapter.Provider.GOOGLEPLUS, R.drawable.googleplus);
try {
//provider = AuthProviderFactory.getInstance(currentAccessGrant.getProviderId(), oauth_consumer.properties);
//provider = AuthProviderFactory.getInstance(currentAccessGrant.getProviderId());
//provider = AuthProviderFactory.getInstance("googleplus");
provider = manager.connect(currentAccessGrant);
//currentAdapter.getCurrentProvider().setAccessGrant(currentAccessGrant);
} catch(Exception e) {
Log.e(DEBUG_TAG, "Social AuthProviderFactory Exception",e);
}
}
这段代码给了我一个“在类路径中找不到oauth_consumer.properties文件”错误…然后我将oauth_consumer.properties添加到build.gradle文件中
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile files('libs/socialauth-android-3.0.jar')
compile files('libs/socialauth-4.3.jar')
compile files ('src/main/assets/oauth_consumer.properties')
}
现在,无论我尝试以何种方式使用AuthManager或AuthProviderFactory,这都只会产生一个NullPointerException
03-22 18:06:31.834 29178-29356/com.myapp.app3 E/DownloadFriendService$DownloaderTask﹕ SocialAuthConfig.load Exception
java.lang.NullPointerException
at com.myapp.app3.service.DownloadFriendService$DownloaderTask.doSomething(DownloadFriendService.java:127)
at com.myapp.app3.service.DownloadFriendService$DownloaderTask.doInBackground(DownloadFriendService.java:87)
at com.myapp.app3.service.DownloadFriendService$DownloaderTask.doInBackground(DownloadFriendService.java:77)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
03-22 18:06:31.834 29178-29356/com.myapp.app3 D/DownloadFriendService$DownloaderTask﹕ Setting googleplus
03-22 18:06:31.834 29178-29356/com.myapp.app3 E/DownloadFriendService$DownloaderTask﹕ Social AuthProviderFactory Exception
java.lang.NullPointerException
at org.brickred.socialauth.SocialAuthManager.getProviderInstance(SocialAuthManager.java:317)
at org.brickred.socialauth.SocialAuthManager.connect(SocialAuthManager.java:257)
at com.myapp.app3.service.DownloadFriendService$DownloaderTask.doSomething(DownloadFriendService.java:163)
at com.myapp.app3.service.DownloadFriendService$DownloaderTask.doInBackground(DownloadFriendService.java:87)
at com.myapp.app3.service.DownloadFriendService$DownloaderTask.doInBackground(DownloadFriendService.java:77)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
如果有安卓socialauth专家,你能告诉我:-我在哪里错误地实现了这一点?
-我是否应该寻找另一种方法来实现这一目标?
-为什么在我尝试直接使用AuthManager或AuthProviderFactory时找不到oauth_consumer.properties文件,但在活动中使用AuthAdapter时却找到了它(根据socialauth andriod示例项目) 谢谢 解决了! 这肯定是我的错 由于某些原因,找不到属性文件,因此以下是我为其他困在同一位置的人提供的解决方案: 启动命令
config = SocialAuthConfig.getDefault();
try {
config.load("assets/oauth_consumer.properties");
} catch(Exception e) {
Log.e(DEBUG_TAG, "SocialAuthConfig.load 1 Exception", e);
}
manager = new SocialAuthManager();
try {
manager.setSocialAuthConfig(config);
} catch(Exception e) {
Log.e(DEBUG_TAG, "SocialAuthManager.setSocialAuthConfig 1 Exception", e);
}
然后在异步任务中
provider = manager.connect(currentAccessGrant);
provider.registerPlugins();
try {
contacts = provider.getContactList();
} catch (Exception e) {
Log.e(DEBUG_TAG, "Possible expired token?/n", e);
}