modifica 4/15: Il rilevamento di nullpointer in IabHelper sembra aver interrotto questo problema. Non vedo più le eccezioni lanciate, lo accetterò come risposta.API di fatturazione v3 IabHelper NullPointerException
modificare 4/04: Un po 'di un'immersione più profonda. Esistono blocchi catch catch che gestiscono RemoteExceptions e JSONExceptions per il metodo queryPurchases, ma nessuna gestione NullPointerException. Quello che ho intenzione di provare è includere La gestione delle eccezioni NullPointer così IabHelper assomiglia a questo quando si cerca di querySkuDetails:
catch (NullPointerException e) {
throw new IabException(IABHELPER_UNKNOWN_ERROR, "NullPointer while refreshing inventory.", e);
}
Ho appena depositato un bug su questo:
https://code.google.com/p/marketbilling/issues/detail?id=114
modifica 3/25: beh, continuando a ricevere questo crash ... ora capita mentre provo a ottenere un contesto alla riga 3 del seguente estratto da IabHelper:
Questo è frustrante perché nel mio manifest uso sempre il nome completo del percorso della mia app per "nome".
Esempio "com.myappname.blah.ClassName"
ho provato anche passare questo, MyClass.this, getApplicationContext() per mHelper. Tuttavia producono tutti gli stessi risultati di NullPointer casualmente dai dispositivi in natura. Ho anche provato name = ". MyClass" nel manifest. Questo è ciò che sembra attualmente:
mHelper = new IabHelper(MyClass.this, myKey);
modificare 3/18/13: sto ancora ricevendo eccezioni, anche con la nuova versione IabHelper distribuito su 3/17.
Sto iniziando a vedere uno schema qui, che gli arresti anomali sono tutti quando si cerca di ottenere un contesto quando si esegue mContext.getPackageName(). Sono curioso del motivo per cui questo funziona su tutti i miei dispositivi di test, e non riesco a riprodurre questo crash, e sembra solo essere su un piccolo numero di dispositivi.
Ecco il nuovo incidente:
java.lang.NullPointerException
at com.myapp.util.IabHelper.queryPurchases(SourceFile:836)
at com.myapp.util.IabHelper.queryInventory(SourceFile:558)
at com.myapp.util.IabHelper.queryInventory(SourceFile:522)
at com.myapp.util.IabHelper$2.run(SourceFile:617)
at java.lang.Thread.run(Thread.java:1019)
Causato da IabHelper ...
line 836: logDebug("Package name: " + mContext.getPackageName());
modificare 3/17/13: vedo che ci sono stati molti bug correzioni pubblicate negli ultimi mesi, proverò l'ultimo codice disponibile qui e vedere se questo risolve il problema:
In una delle mie applicazioni, sto usando l'API di fatturazione e il codice standard incluso con esso.
Sto utilizzando l'ultima versione dell'API di fatturazione disponibile tramite il gestore SDK a partire dal 16/03/2013.
Nella mia attività, interrogo l'inventario utilizzando il seguente:
final List<String> skuList = new ArrayList<String>();
skuList.add("sku1");
skuList.add("sku2");
skuList.add("sku3");
if (skuList != null) {
if (skuList.size() > 0) {
try {
mHelper.queryInventoryAsync(true, skuList, mGotInventoryListener);
} catch (Exception e) {
ACRA.getErrorReporter().handleException(e);
}
}
}
Sto ricevendo più rapporti NullPointerException in natura dalla classe IabHelper per i seguenti dispositivi. Non riesco a riprodurre il problema e non riesco a trovare alcuna informazione su questi arresti anomali, ed è il motivo per cui sto postando questa domanda.
Ho innumerevoli altri controlli per null e try/catch blocchi nella parte "developer facing" dell'API di fatturazione, compreso all'interno di onQueryInventoryFinished, quindi so che questa eccezione non viene generata da "my code" (perché I ' m non catturare arresti anomali da nessuna delle mie classi dell'app), ma viene invece generato da IabHelper stesso. Non ho modificato l'IabHelper diverso da questa correzione Raccomandato: https://stackoverflow.com/a/14737699
Crash # 1 Galaxy Nexus
java.lang.NullPointerException
at com.myapp.util.IabHelper.querySkuDetails(SourceFile:802)
at com.myapp.util.IabHelper.queryInventory(SourceFile:471)
at com.myapp.util.IabHelper$2.run(SourceFile:521)
at java.lang.Thread.run(Thread.java:856)
Causato da IabHelper ...
line 802: Bundle skuDetails = mService.getSkuDetails(3, mContext.getPackageName(), ITEM_TYPE_INAPP, querySkus);
Crash # 2 Samsung GT -S5570L
java.lang.NullPointerException
at com.myapp.util.IabHelper.queryPurchases(SourceFile:735)
at com.myapp.util.IabHelper.queryInventory(SourceFile:465)
at com.myapp.util.IabHelper$2.run(SourceFile:521)
at java.lang.Thread.run(Thread.java:1019)
Causato da IabHelper ...
line 735: Bundle ownedItems = mService.getPurchases(3, mContext.getPackageName(), ITEM_TYPE_INAPP, continueToken);
Sto ottenendo il seguente registro di arresto anomalo. 'java.lang.NullPointerException su com.myapp.util.IabHelper.queryPurchases (SourceFile: 735) su com.myapp.util.IabHelper.queryInventory (SourceFile: 465) su com.myapp.util.IabHelper $ 2.run (SourceFile: 521) a java.lang.Thread.run (Thread.java:1019) 'Qualcuno ha capito che cosa potrebbe causare questo. Sto verificando se la connessione viene stabilita prima di effettuare una query sugli acquisti. – glo
Sto vedendo la stessa cosa ancora, anche con l'ultimo codice di un paio di settimane fa. È molto frustrante, ma sembra essere correlato ai contesti. Ho provato diversi modi di passare il contesto a IabHelper, ma sembrano tutti bloccarsi. Nella mia ultima versione ho commentato la riga di log che lanciava l'eccezione, ma ora si sta bloccando in un altro posto. – logray
@ glo Ho appena presentato un bug su questo: https://code.google.com/p/marketbilling/issues/detail?id=114 – logray