在新 Android Studio 中初始化条纹对象
Initialize a Stripe Object in new Android Studio
目前,我正在努力在 Android Studio 应用程序中创建 Stripe 支付方式。这将涉及一个信用卡对象,该对象将由 Stripe 存储到我的 Firestore 数据库中。不幸的是,我使用的教程中的一行已经过时,因为它在没有视图的情况下使用了 getContext()。
条纹背景:
https://www.youtube.com/watch?v=JeyxolsJ3aE
Firestore 的背景:
https://firebase.google.com/docs/firestore
这是我正在关注的教程的 link:
https://stripe.com/docs/mobile/android
不幸的是,我没能找到已知的、使用相同格式但不使用 getContext() 的教程。
我已经完成了插入行的所有步骤:
final Stripe stripe = new Stripe(
getContext(),
"pk_test_TYooMQauvdEDq54NiTphI7jx"
);
在我的 Android Studio (3.4.1) 版本中,getContext() 似乎无法在没有视图的情况下使用(显示为红色)。因此,我尝试用各种命令来代替。但是,它们都产生相同的崩溃消息 "Invalid Content Provider: null"。我相信 "Content Provider" 指的是传入的上下文。
我应该提一下,Stripe 对象是在 On-Click 侦听器中创建的。此外,我知道 "pk_test" 密钥是正确的,并且我测试了其他有效 ID 也无济于事。此外,通过注释掉代码的测试,我确信这是产生我的错误的行。
我的理论是上下文被 Stripe 或 Firebase 拒绝了。这是因为 Stripe 上下文被称为 "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()
我还尝试在变量中的 OnClick 侦听器上方的 OnCreate 中捕获上下文。
由于其中 none 有效,我不知道该怎么做。
这是我的 Java 代码:
public class AddCardActivity 扩展 AppCompatActivity {
私人按钮提交;
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);
}
给你:
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();
}
目前,我正在努力在 Android Studio 应用程序中创建 Stripe 支付方式。这将涉及一个信用卡对象,该对象将由 Stripe 存储到我的 Firestore 数据库中。不幸的是,我使用的教程中的一行已经过时,因为它在没有视图的情况下使用了 getContext()。
条纹背景: https://www.youtube.com/watch?v=JeyxolsJ3aE
Firestore 的背景: https://firebase.google.com/docs/firestore
这是我正在关注的教程的 link: https://stripe.com/docs/mobile/android 不幸的是,我没能找到已知的、使用相同格式但不使用 getContext() 的教程。
我已经完成了插入行的所有步骤:
final Stripe stripe = new Stripe(
getContext(),
"pk_test_TYooMQauvdEDq54NiTphI7jx"
);
在我的 Android Studio (3.4.1) 版本中,getContext() 似乎无法在没有视图的情况下使用(显示为红色)。因此,我尝试用各种命令来代替。但是,它们都产生相同的崩溃消息 "Invalid Content Provider: null"。我相信 "Content Provider" 指的是传入的上下文。
我应该提一下,Stripe 对象是在 On-Click 侦听器中创建的。此外,我知道 "pk_test" 密钥是正确的,并且我测试了其他有效 ID 也无济于事。此外,通过注释掉代码的测试,我确信这是产生我的错误的行。
我的理论是上下文被 Stripe 或 Firebase 拒绝了。这是因为 Stripe 上下文被称为 "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()
我还尝试在变量中的 OnClick 侦听器上方的 OnCreate 中捕获上下文。
由于其中 none 有效,我不知道该怎么做。 这是我的 Java 代码:
public class AddCardActivity 扩展 AppCompatActivity { 私人按钮提交;
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);
}
给你:
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();
}