DJ-DOO
DJ-DOO

Reputation: 4780

java.lang.IllegalStateException: Could not execute method

I'm not very experienced in Android and I've taken over someone else's work and have been asked to implement in billing v3.

I have debugged the code and have located the issue here

//IF THE BUTTON IS VISIBLE, AND CLICKED, PURCHASE CALCULATOR  
    public void unlockCalculators(View v) {  
    String payload = "";  
       mHelper.launchPurchaseFlow(this, SKU_riskCalc, RC_REQUEST,  
                mPurchaseFinishedListener, payload);  <---- LINE 250  
            Log.d("BP_EXPERT", "PURCHASE RISK CALC");  

    } 

Here is where the mPurchasedListener is defined

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener()  
   {  
       @Override  
       public void onIabPurchaseFinished(IabResult result, Purchase purchase)  
       {  
           Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);  
           if (result.isFailure()) {  
               complain("Error purchasing: " + result);  
           }  
           if (!verifyDeveloperPayload(purchase)) {  
               complain("Error purchasing. Authenticity verification failed.");  
               return;  

           }  
           else if (purchase.getSku().equals(SKU_riskCalc)){  

               //UPDATE SHARED PREFERENCES HERE...  
               SharedPreferences prefs = getSharedPreferences("BloodPressure",MODE_PRIVATE);  
               SharedPreferences.Editor edit = prefs.edit();  
               edit.putBoolean("purchased_calcs", true);  
               edit.commit();  
               Log.d("BP_EXPERT", "PURCHASING RISK CALC");  
               //SELECT CORRECT LAYOUT AFTER PURCHASE  
               createStuff();  
           }  
           else if (purchase.getSku().equals(SKU_all)){  

               //UPDATE SHARED PREFERENCES HERE...  
               SharedPreferences prefs = getSharedPreferences("BloodPressure",MODE_PRIVATE);  
               SharedPreferences.Editor edit = prefs.edit();  
               edit.putBoolean("purchased_all", true);  
               edit.commit();  
               Log.d("BP_EXPERT", "PURCHASING ALL CONTENT");  
               //SELECT CORRECT LAYOUT AFTER PURCHASE  
               createStuff();  
           }  
           Log.d(TAG, "Purchase successful.");  
       }  
   };  

When the app enters the launch purchase flow is when its forced closed. If anyone has any ideas as to what might be the problem I'd really appreciate it. I've come across this problem, I'm not quite sure what is causing it, when I click on the button I get the following in my logcat

7-09 11:48:14.495: E/AndroidRuntime(1702): FATAL EXCEPTION: main  
07-09 11:48:14.495: E/AndroidRuntime(1702): java.lang.IllegalStateException: Could not execute method of the activity  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.view.View$1.onClick(View.java:2072)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.view.View.performClick(View.java:2408)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.view.View$PerformClick.run(View.java:8817)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.os.Handler.handleCallback(Handler.java:587)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.os.Handler.dispatchMessage(Handler.java:92)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.os.Looper.loop(Looper.java:144)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.app.ActivityThread.main(ActivityThread.java:4937)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at java.lang.reflect.Method.invokeNative(Native Method)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at java.lang.reflect.Method.invoke(Method.java:521)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at dalvik.system.NativeStart.main(Native Method)  
07-09 11:48:14.495: E/AndroidRuntime(1702): Caused by: java.lang.reflect.InvocationTargetException  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at com.bpxpert.bloodpressure.CalculatorRisk.unlockCalculators(CalculatorRisk.java:250)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at java.lang.reflect.Method.invokeNative(Native Method)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at java.lang.reflect.Method.invoke(Method.java:521)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.view.View$1.onClick(View.java:2067)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     ... 11 more  
07-09 11:48:14.495: E/AndroidRuntime(1702): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@462b6c10 is not valid; is your activity running?  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.view.ViewRoot.setView(ViewRoot.java:509)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.view.Window$LocalWindowManager.addView(Window.java:424)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at android.app.Dialog.show(Dialog.java:241)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at com.bpxpert.bloodpressure.CalculatorRisk.alert(CalculatorRisk.java:382)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at com.bpxpert.bloodpressure.CalculatorRisk.complain(CalculatorRisk.java:374)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at com.bpxpert.bloodpressure.CalculatorRisk$3.onIabPurchaseFinished(CalculatorRisk.java:277)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at com.bpxpert.bloodpressure.util.IabHelper.launchPurchaseFlow(IabHelper.java:376)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     at com.bpxpert.bloodpressure.util.IabHelper.launchPurchaseFlow(IabHelper.java:324)  
07-09 11:48:14.495: E/AndroidRuntime(1702):     ... 15 more  
07-09 11:48:14.505: W/ActivityManager(105):   Force finishing activity com.bpxpert.bloodpressure/.BloodPressureActivity  

If anyone could point out to me where I'm going wrong I'd really appreciate it.

Upvotes: 0

Views: 907

Answers (1)

Rajeev
Rajeev

Reputation: 1404

The problem is here

07-09 11:48:14.495: E/AndroidRuntime(1702): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@462b6c10 is not valid; is your activity running?
07-09 11:48:14.495: E/AndroidRuntime(1702): at android.view.ViewRoot.setView(ViewRoot.java:509)
07-09 11:48:14.495: E/AndroidRuntime(1702): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
07-09 11:48:14.495: E/AndroidRuntime(1702): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
07-09 11:48:14.495: E/AndroidRuntime(1702): at android.view.Window$LocalWindowManager.addView(Window.java:424)
07-09 11:48:14.495: E/AndroidRuntime(1702): at android.app.Dialog.show(Dialog.java:241)
07-09 11:48:14.495: E/AndroidRuntime(1702): at com.bpxpert.bloodpressure.CalculatorRisk.alert(CalculatorRisk.java:382)

I am sure the below line tries to show a dialog

mHelper.launchPurchaseFlow(this, SKU_riskCalc, RC_REQUEST,  
            mPurchaseFinishedListener, payload);

But somewhere your activity is getting destroyed, so the dialog fails to display and the application crashes.

EDIT: In you class declare a variable of type Activity

private Activity mActivityContext = null;

in Your OnCreate method initialize the variable

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mActivityContext = this;

    // Your Rest of the code
}

And then while calling launchPurchaseFlow use the variable instead of "this"

mHelper.launchPurchaseFlow(mActivityContext, SKU_riskCalc, RC_REQUEST,  
            mPurchaseFinishedListener, payload); 

Upvotes: 2

Related Questions