私はいくつかの関連する質問を見ましたが、私が持っている特定の問題に焦点を当てたものはありません:
PayPalMPLライブラリを使用しています。
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の変更を保存できるようにします。
しかし、MyActivityフィールドがSerializableではないことを示すNotSerializableExceptionが発生します。
そのため、ResultDelegate内のアクティビティフィールドに一時的な識別子を追加しましたが、NullPointerExceptionが発生します。