0

我们在帐户工具包中收到以下错误。
如果有人能说出它的原因以及如何解决它,那将非常有帮助。

java.lang.RuntimeException: 
  at android.app.ActivityThread.performResumeActivity (ActivityThread.java:4155)
  at android.app.ActivityThread.handleResumeActivity (ActivityThread.java:4246)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3360)
  at android.app.ActivityThread.access$1100 (ActivityThread.java:221)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1794)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:158)
  at android.app.ActivityThread.main (ActivityThread.java:7225)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)


Caused by: java.lang.ArrayIndexOutOfBoundsException: 
  at com.facebook.accountkit.ui.PhoneCountryCodeAdapter.getItem (PhoneCountryCodeAdapter.java:253)
  at com.facebook.accountkit.ui.PhoneContentController$TopFragment.setPhoneNumberText (PhoneContentController.java:435)
  at com.facebook.accountkit.ui.PhoneContentController$TopFragment.onViewReadyWithState (PhoneContentController.java:362)
  at com.facebook.accountkit.ui.ViewStateFragment.onActivityCreated (ViewStateFragment.java:66)
  at com.facebook.accountkit.ui.PhoneContentController$TopFragment.onActivityCreated (PhoneContentController.java:201)
  at android.app.Fragment.performActivityCreated (Fragment.java:2289)
  at android.app.FragmentManagerImpl.moveToState (FragmentManager.java:1007)
  at android.app.FragmentManagerImpl.moveToState (FragmentManager.java:1163)
  at android.app.BackStackRecord.run (BackStackRecord.java:793)
  at android.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:1552)
  at android.app.FragmentController.execPendingActions (FragmentController.java:325)
  at android.app.Activity.performResume (Activity.java:7014)
  at android.app.ActivityThread.performResumeActivity (ActivityThread.java:4144)

那么这条线 Caused by: java.lang.ArrayIndexOutOfBoundsException: at com.facebook.accountkit.ui.PhoneCountryCodeAdapter.getItem是由于facebook库中编写的一段代码引起的吗?或者它是我们可以通过使用配置文件等来控制并以某种方式改变的东西?

我们只是在我们的应用程序中使用https://developers.facebook.com/docs/accountkit/android。它在许多设备上工作正常,但有些设备超出了错误。

遵循调用 accountkit 的活动中的 onCreate 代码。而且我们没有使用 onResume。

SkinManager uiManager = new SkinManager(
               SkinManager.Skin.CONTEMPORARY,
               getResources().getColor(R.color.colorPrimary),
               R.drawable.login_bg2,
               SkinManager.Tint.WHITE,
               0.55D);

       intent = new Intent(this, AccountKitActivity.class);

       AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
               new AccountKitConfiguration.AccountKitConfigurationBuilder(
                       LoginType.PHONE,
                       AccountKitActivity.ResponseType.TOKEN); // or .ResponseType.TOKEN

       configurationBuilder.setSMSWhitelist(new String[]{"PK"});
       configurationBuilder.setUIManager(uiManager);
       intent.putExtra(
               AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,
               configurationBuilder.build());

响应 开始得到响应。

startActivityForResult(intent, APP_REQUEST_CODE);

在这里我们正在处理响应

    @Override
        protected void onActivityResult(
                final int requestCode,
                final int resultCode,
                final Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == APP_REQUEST_CODE) {
                btnContinue.setEnabled(true);
                // confirm that this response matches your request
                final AccountKitLoginResult loginResult = data.getParcelableExtra(AccountKitLoginResult.RESULT_KEY);
                if (loginResult.getError() != null) {
                } else if (loginResult.wasCancelled()) {
                } else {
                    progressDialog.show();
                    if(loginResult.getAccessToken()!=null){
                        fbAccessToken = loginResult.getAccessToken().getToken();
                    }

                    AccountKit.getCurrentAccount(new AccountKitCallback<Account>() {
                        @Override
                        public void onSuccess(Account account) {
                            PhoneNumber phoneNumber = account.getPhoneNumber();
                            phoneNumberString = phoneNumber.getPhoneNumber();
 // some bla bla to call our APIs to save the response
}
                        @Override
                        public void onError(AccountKitError accountKitError) {
                            Log.e(TAG, "onError");
                            progressDialog.hide();
                            Toast.makeText(SignInActivity.this, accountKitError.getUserFacingMessage(), Toast.LENGTH_SHORT).show();
                        }
                    });

                }
            }
        }
4

2 回答 2

0

这是我的最终代码。

public class AccountKitLoginManager {
public final static int APP_REQUEST_CODE = 99;
public static void login(Activity activity){
    final Intent intent = new Intent(activity, AccountKitActivity.class);
    AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
            new AccountKitConfiguration.AccountKitConfigurationBuilder(
                    LoginType.PHONE,
                    AccountKitActivity.ResponseType.CODE).setSMSWhitelist(new String[]{"MM"}); // or .ResponseType.TOKEN
    intent.putExtra(
            AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,
            configurationBuilder.build());
    activity.startActivityForResult(intent, APP_REQUEST_CODE);
   }
}

第一个错误对你来说是一样的。这个代码的原因是 String[]{"MM , CN"}。所以我删除了 CN。我的程序很好。

于 2019-05-27T03:31:03.133 回答
0

你必须打电话

configurationBuilder.setDefaultCountryCode("PH");

我也被这个问题困扰了很久。

于 2018-11-01T10:28:30.387 回答