我已经看到了一些相关的问题,但没有人关注我遇到的具体问题:
我正在使用 PayPal MPL 库。
我构建我的 PayPalPayment 对象,然后为结帐创建活动。运行良好。我的问题是,在 ResultDelegate 上,我需要从我的活动中调用一个函数,该函数在付款后发生并进行一些更改(例如存储 SharedPreferences 等)。
所以是这样的:
public class ResultDelegate implements PayPalResultDelegate, Serializable {
public void onPaymentSucceeded(String payKey, String paymentStatus) {
System.out.println("SUCCESS, You have successfully completed your transaction.");
System.out.println("PayKey: "+payKey);
System.out.println("PayStatus: "+paymentStatus);
callMyCustomAfterPaymentFunction();
}
...
}
现在的问题是,我尝试为 ResultDelegate 创建一个接受我的活动的构造函数。我现有的代码是:
//On the activity class
public class MainMenuActivity extends Activity {
public void onCreate(Bundle savedInstanceState)
{
...
Button buy = (Button) findViewByID(R.id.buy_button);
buy.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
new PurchaseTask(activity).execute();
}
}
}
}
public class PurchaseTask extends AsyncTask <String, Void, String> {
protected String doInBackground()
{
...
PayPal pp = PayPal.getInstance();
CheckoutButton cb = pp.getCheckoutButton(...);
cb.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
ResultDelegate delegate = new ResultDelegate(myActivity);
Intent checkout = PayPal.getInstance().checkout(paument, activity, delegate);
activity.StartActivity(checkoutIntent);
}
}
}
}
//On the ResultDelegate class
public class ResultDelegate implements PayPalResultDelegate, Serializable {
private Activity myActivity;
public void onPaymentSucceeded(String payKey, String paymentStatus) {
System.out.println("SUCCESS, You have successfully completed your transaction.");
System.out.println("PayKey: "+payKey);
System.out.println("PayStatus: "+paymentStatus);
myActivity.performAfterPaymentOperations();
}
...
}
所以目标是从 ResultDelegate 调用活动函数。或者更简单,只是为了能够在 ResultDelegate onPaymentSucceeded() 触发时存储一些 SharedPreference 更改。
但是我得到一个 NotSerializableException 提到我的 MyActivity 字段不是可序列化的。
因此,然后我将瞬态标识符添加到 ResultDelegate 内的活动字段中,但现在我得到了 NullPointerException。