В настоящее время я работаю над созданием метода оплаты 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);
}