Activity ResultCrash, Android Studio, Котлин

Я добавляю социальные приложения в свое приложение (я изучаю кодирование для Android в Kotlin). У меня есть вход в Facebook и Twitter, но я должен закомментировать один или другой в ActivityResult. Есть ли способ, чтобы оба без комментариев.

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    // Pass the activity result back to the Facebook SDK
    callbackManager.onActivityResult(requestCode, resultCode, data)
    loginButton!!.onActivityResult(requestCode, resultCode, data)
}

Первый - это Facebook, а второй - Twitter.

2 ответа

Решение

Используйте разные requestCodeс, что-то вроде:

companion object {
    private const val CODE_FB = 100
    private const val CODE_TWITTER = 101
}

Проходить CODE_FB когда ты startActivityForResult() для Facebook и использовать CODE_TWITTER для твиттера.

Внутри вашего onActivityResult(), фильтр по коду запроса:

when (requestCode) {
    CODE_FB -> callbackManager.onActivityResult(requestCode, resultCode, data)
    CODE_TWITTER -> loginButton!!.onActivityResult(requestCode, resultCode, data)
}

В OnActivityResult()

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
 Log.d(TAG, "onActivityResult:" + requestCode + ":" + resultCode + ":" + data);

if (requestCode == RC_SIGN_IN) {
   if (resultCode != RESULT_OK) {
       mShouldResolve = false; // This variable comes from onConnectionFailed class 
}
mIsResolving = false;
mGoogleApiClient.connect();
}else{
//Now it must be Twitter.
callbackManager.onActivityResult(requestCode, resultCode, data);
  }
}
Другие вопросы по тегам