Инициализация объекта Stripe в новой Android Studio - PullRequest
0 голосов
/ 25 июня 2019

В настоящее время я работаю над созданием метода оплаты Stripe в приложении Android Studio.Это будет связано с объектом кредитной карты, который будет храниться Stripe в моей базе данных Firestore.К сожалению, одна из строк в уроке, которую я использовал, устарела, поскольку она использует getContext () без представления.

Фон на полосе: https://www.youtube.com/watch?v=JeyxolsJ3aE

Фон на Firestore: https://firebase.google.com/docs/firestore

Вот ссылка на ту обучающую программу, которой я следую: https://stripe.com/docs/mobile/androidК сожалению, мне не очень повезло найти учебник, который знает, использует тот же формат и не использует getContext ().

Я уже выполнил все шаги до вставки строки:

final Stripe stripe = new Stripe(
    getContext(),
    "pk_test_TYooMQauvdEDq54NiTphI7jx"
);

В моей версии Android Studio (3.4.1), похоже, getContext () нельзя использовать без View(отображается как красный).В результате я попытался заменить различные команды.Тем не менее все они выдают один и тот же сбой с сообщением «Invalid Content Provider: null».Я полагаю, что «Поставщик контента» относится к переданному контексту.

Я должен упомянуть, что объект Stripe создается в прослушивателе по щелчку.Кроме того, я знаю, что ключ "pk_test" правильный, и я проверил другие действительные идентификаторы также безрезультатно.Кроме того, благодаря тестам с комментированием кода, я уверен, что это строка, выдающая мою ошибку.

Моя теория состоит в том, что контекст отклоняется Stripe или Firebase.Это связано с тем, что Stripe Context известен как «Stripe Provider» (https://lh3.googleusercontent.com/-ByYW3X0ua38/XQ_kRpmddLI/AAAAAAAAAAI/YfhjxSJ9iO0aJwZ8RtANeCXKXyYglWX1QCK8BGAs/s0/2019-06-23.png)

Некоторые из команд, которые я пробовал:

getContext() (not recognized)
getApplicationContext()
getBaseContext()
this
this.getApplicationContext()
ClassName.this.getApplicationContext()
ClassName.this.getBaseContext()
Submit.getContext()
WrappingLayoutView.getContext()

Я также пытался захватитьКонтекст в OnCreate над слушателем OnClick в переменной.

Поскольку ни один из них не работает, я довольно застрял в том, что делать. Вот мой код Java:

открытый класс AddCardActivity extendsAppCompatActivity {приватная кнопка отправки;

public Context mContext;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_card);
    init();

    mContext = this.getApplicationContext();

    //Not working
    /**View mV=findViewById(R.id.myLView);
     mContext=mV.getContext();**/
    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             //Use stripe to add new payment to firestore


            //This line causes a crash
            Stripe stripe = new Stripe(submit.getContext(),
                    "pk_test_t6NMvJpXDEZd3eOn5SU4y6DA"
            );
            // The Card class will normalize the card number
            final Card card = Card.create("4242-4242-4242-4242", 12, 2020, "123");
            //Update this with more useful error messages
            if (card == null) {
                Toast.makeText(getApplicationContext(), "Invalid Card!", Toast.LENGTH_LONG).show();
            }

            card.validateNumber();
            card.validateCVC();
            stripe.createToken(
                    card,
                    new TokenCallback() {
                        public void onSuccess(@NonNull Token token) {
                            // Send token to your server
                        }

                        public void onError(@NonNull Exception error) {
                            // Show localized error message
                            Toast.makeText(getApplicationContext(), "Invalid Card!", Toast.LENGTH_LONG).show();
                        }
                    }
            );
        }
    });


}

private void init() {
    submit = (Button) findViewById(R.id.addCardActivityButton);
}

1 Ответ

0 голосов
/ 25 июня 2019

Вот, пожалуйста:

Token token = null;

final Card card = new Card(cardNumber, month, year, cvc);

final Stripe stripe = new Stripe(getApplicationContext());
try {

    token = stripe.createTokenSynchronous(card, "pk_test_TYooMQauvdEDq54NiTphI7jx");

} catch (StripeException stripeEx) {

    errorMessage = stripeEx.getLocalizedMessage();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...