android - 如何正确使用 AccessGrant 连接到 android socialauth 提供程序

标签 android android-asynctask socialauth

我的 android 应用正在存储来自成功的 socialauth 授权的 android socialauth AccessGrant 对象。我将其保存在 sqlite 中,并尝试使用存储的 AccessGrant 对象允许具有 AsycTask 的服务连接到提供商(facebook、googleplus 等),而不向用户显示登录屏幕。 这是服务的 AsyncTask 中的代码段...

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)

如果有任何 android socialauth 专家,你能告诉我吗:
- 我在哪里实现不正确?
- 我应该寻找另一种方法来实现这一目标吗?
- 为什么在我尝试直接使用 AuthManager 或 AuthProviderFactory 时找不到 oauth_consumer.properties 文件,但在 Activity 中使用 AuthAdapter 时却找到了它(根据 socialauth andriod 示例项目)?

谢谢!

最佳答案

解决了! 这绝对是我的错。

由于某些原因找不到属性文件,所以这是我为其他卡在同一个地方的人提供的解决方案:

onStartCommand....

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);
}

然后在 AsyncTask 中....

                provider = manager.connect(currentAccessGrant);

                provider.registerPlugins();

                try {
                    contacts = provider.getContactList();
                } catch (Exception e) {
                    Log.e(DEBUG_TAG, "Possible expired token?/n", e);
                }

关于android - 如何正确使用 AccessGrant 连接到 android socialauth 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22585419/

相关文章:

java - Android SDK 的快速位图模糊

Android AsyncTasks 如何检查 Activity 是否仍在运行

android - 如何在 android 中使用 Social Auth 获取 twitter 的好友列表?

java - 在 Eclipse 中添加 SocialAuth 时出现 NoClassDefFoundError

java - map 上多个标记的实时动画

java - R.java是手动修改的!恢复生成的版本错误

android - Android 中神秘的 SQLiteBindOrColumn OutOfRangeException。

android - 异步任务在 OnclickListener 中崩溃

android - 旋转屏幕后 ProgressDialog 消失

facebook-login - 使用 native 应用程序在移动设备上登录 Hybridauth Facebook