2011-07-04 10 views
5

https://github.com/robotmedia/AndroidBillingLibrary¿Cómo se usa la Biblioteca de Facturación de Android?

He creado la clase de facturación por separado:

public class Billing extends AbstractBillingActivity { 
    private static final String TAG = "Billing"; 

    public Billing() { 
    } 

    @Override 
    public void onBillingChecked(boolean supported) { 
     Log.i(TAG, "Billing supported: " + supported); 
    } 

una vez que el usuario pulsa el botón de Preferencias que hago:

Preference buyPref = (Preference) findPreference("pref_billing_buy"); 
    buyPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
     public boolean onPreferenceClick(Preference preference) { 
      if (Debug.Yes) Log.d(TAG, "Buying ad-free version"); 
      Billing billing = new Billing(); 
      billing.checkBillingSupported(); 

      return true; 
     } 
    }); 

y conseguir el error siguiente:

07-04 20:21:22.797: ERROR/AndroidRuntime(7172): FATAL EXCEPTION: main 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172): java.lang.NullPointerException 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at android.content.ContextWrapper.getPackageName(ContextWrapper.java:120) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at net.robotmedia.billing.BillingService.getActionForIntent(BillingService.java:76) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at net.robotmedia.billing.BillingService.createIntent(BillingService.java:69) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at net.robotmedia.billing.BillingService.checkBillingSupported(BillingService.java:58) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at net.robotmedia.billing.BillingController.checkBillingSupported(BillingController.java:114) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at net.robotmedia.billing.AbstractBillingActivity.checkBillingSupported(AbstractBillingActivity.java:42) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at spb.bridges.Preferences$1.onPreferenceClick(Preferences.java:212) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at android.preference.Preference.performClick(Preference.java:812) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:198) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at android.widget.ListView.performItemClick(ListView.java:3382) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at android.os.Handler.handleCallback(Handler.java:587) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at android.os.Handler.dispatchMessage(Handler.java:92) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at android.os.Looper.loop(Looper.java:144) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
07-04 20:21:22.797: ERROR/AndroidRuntime(7172):  at dalvik.system.NativeStart.main(Native Method) 

¿Qué hay de malo en mi código?

Además, la documentación dice

When started your AbstractBillingActivity subclass will check if in-app billing is supported, followed by a call to onBillingChecked(boolean), which has to be implemented by the subclass.

Pero en realidad no se llama onBillingChecked().

Respuesta

2

que deben leer la documentación con más cuidado:

AbstractBillingActivity is an abstract activity that provides default integration with in-app billing.

Por lo tanto, se comienza a trabajar cuando he reemplazado en mi código extends Activity con extends AbstractBillingActivity (de hecho ya lo he usado PreferenceActivity, no sólo Activity, Tuve que editar AbstractBillingActivity también).

+1

Buena captura sobre PreferenceActivity. Deberíamos agregar más clases de conveniencia para las subclases de actividad más comunes (PreferenceActivity, ListActivity, etc.). – hpique

Cuestiones relacionadas