2013-07-09 5 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

Проблема здесь

07-09 11: 48: 14,495: E/AndroidRuntime (1702): Вызванный: android.view.WindowManager $ BadTokenException: Невозможно добавить окно - маркер андроида. [email protected] недействителен; работает ли ваша деятельность?
07-09 11: 48: 14.495: E/AndroidRuntime (1702): на 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); 

Но где-то ваша деятельность становится разрушена, поэтому диалог не может отображать и приложение аварийно завершает работу.

EDIT: В вас классе объявить переменную типа деятельности

private Activity mActivityContext = null; 

в вашем OnCreate метод инициализации переменной

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

    mActivityContext = this; 

    // Your Rest of the code 
} 

И тогда при вызове launchPurchaseFlow использовать переменную вместо "

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

Спасибо @ Rajeev за то, что он вернулся ко мне. строка 382 является последней строкой метода оповещения 'void alert (String message) { AlertDialog.Builder bld = new AlertDialog.Builder (это); bld.setMessage (сообщение); bld.setNeutralButton ("OK", null); Log.d (TAG, «Отображение диалогового окна предупреждений:« + сообщение »); bld.create(). Show(); } ', но у меня также есть эта функция в других действиях для покупок у них, но у меня нет ошибок –

+0

, когда я вхожу в метод aunchPurchaseFlow, я также устанавливаю точку останова в методе предупреждения ** bld.create(). Show() ; ** эта строка кажется проблемой, –

+0

AlertDialog.Builder bld = new AlertDialog.Builder (this); будет ассоциировать новый диалог с активностью, которая создает диалог. Когда вы делаете bld.create.show(), активность (== this), которая создала это диалоговое окно, уже уничтожена. Убедитесь, что метод finish() вызван в этой активности. – Rajeev

Смежные вопросы