【发布时间】:2012-06-29 09:19:57
【问题描述】:
我看到了一些相关的问题,但没有人关注我遇到的具体问题:
我正在使用 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。
【问题讨论】:
-
你的
Delegate是一个单独的线程吗?请张贴SSCCE。或发布您的Activty和Delegate代码。 -
我想是的。 PayPal 活动是通过 Intent 调用的。 ResultDelegate 是 PayPal 类的子类,用于创建自定义类,然后在创建 PayPal 活动时用作参数。 ResultDelegate 的子类化允许您将自己的代码放在 onPaymentSucceeded() 侦听器中,该侦听器在 PayPalActivity 完成付款时触发。但是,我无法从 ResultDelegate 内部访问我的活动,这是至关重要的。代码经过编辑以提高可读性并添加了详细信息。