2013-07-09 116 views
0

我对Android并不是很有经验,我已经接管别人的工作,并被要求在计费v3中实施。java.lang.IllegalStateException:无法执行方法

我已经调试代码,并已经找到这里的问题

//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"); 

    } 

这里就是mPurchasedListener定义

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."); 
     } 
    }; 

当应用程序进入启动购买流程时,其被迫关闭。如果任何人有任何想法可能是什么问题,我会很感激。 我已经遇到这个问题,我不太清楚是什么原因造成的,当我按一下按钮我得到了我的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 [email protected] 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 

如果有人能指出我在哪里”我错了我真的很感激它。

回答

2

的问题是在这里

十一月七日至九日:48:14.495:E/AndroidRuntime(1702):android.view.WindowManager $ BadTokenException:由造成无法添加窗口 - 标记机器人。 [email protected]无效;你的活动正在运行?
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)

我相信下面的线设法显示一个对话框

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

但是某处将您的活动被破坏掉了,所以对话框不能显示和应用程序崩溃。

编辑: 在你的类在你onCreate方法声明类型活动

private Activity mActivityContext = null; 

的变量初始化变量

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

    mActivityContext = this; 

    // Your Rest of the code 
} 

然后同时呼吁launchPurchaseFlow使用变量,而不是“ This

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

谢谢@Rajeev回到我身边。第382行是警报方法'void alert(String message)的最后一行{AlertDialog.Builder bld = new AlertDialog。助洗剂(本); bld.setMessage(message); bld.setNeutralButton(“OK”,null); Log.d(TAG,“显示警告对话框:”+消息); Log.d bld.create()。show(); }”,但我也有在这些采购等活动这个功能,但没有错误 –

+0

当我踏进aunchPurchaseFlow方法,我也是在警报系统设置一个断点** bld.create()。节目() ; **这行似乎是一个问题, –

+0

AlertDialog.Builder bld = new AlertDialog.Builder(this);会将新对话框关联到正在创建对话框的活动。当你在做bld.create.show()时,创建这个对话框的活动(== this)已经被销毁了。检查在该活动中调用的任何finish()方法。 – Rajeev

相关问题