Я выполнил платежную операцию в приложении, успешно обработав покупки в приложении, среди запросов на покупку, которая определяет, назначен ли пользователь ie. adblock.
Теперь я хотел бы запустить свой метод из действия в приложении, в моей основной деятельности, чтобы я мог запросить, как только приложение откроется. Тем не менее, я получаю исключение nullPointerException, когда я запускаю этот метод, происходящий из строки, состоящей из boolean adFree = mSharedPreferences.getBoolean(getString(R.string.remove_ads_key), false);
Мое предположение заключается в том, что это из-за проблем с контекстом, как я в MainActivity, вызов метода из действия InApp. Хотя я не могу понять, как решить эту проблему, и был бы признателен за любую помощь, которую вы можете предложить.
//InApp Activity
private SharedPreferences mSharedPreferences;
private SharedPreferences.Editor mEditor;
private Context context;
...
public InApp(Context context){
this.context = context;
}
...
onCreate() {
context = this;
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
mEditor = mSharedPreferences.edit();
}
public void setupBillingClient(Context context){
mBillingClient = BillingClient.newBuilder(context).setListener(this).enablePendingPurchases().build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK){
Log.i(TAG, "Billing Connected");
List<String> skuList = new ArrayList<>();
skuList.add(ITEM_SKU_ADREMOVAL);
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener(){
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null){
Log.i(TAG, "SkuDetailsResponse OK & skuDetailsList !=null - Contains: " + skuDetailsList.toString());
for (SkuDetails skuDetails : skuDetailsList) {
Log.i(TAG, "skuDetails: " + skuDetails.toString());
Log.i(TAG, "skuDetailsList: " + skuDetailsList);
String sku = skuDetails.getSku();
String price = skuDetails.getPrice();
skuDetails2 = skuDetails;
Log.i(TAG, "SkuDetailsResponse found sku: " + sku);
if (ITEM_SKU_ADREMOVAL.equals(sku)){
adRemovalPrice = price;
boolean adFree = mSharedPreferences.getBoolean(getString(R.string.remove_ads_key), false);
if (adFree == false){
ad_button.setText(adRemovalPrice);
}
}
}
}
}
});
}else{
Log.i(TAG, "setupBillingClient() ResponseCode: " + billingResult.getResponseCode());
}
//queryPurchases();
}
//MainActivity
static Context context;
...
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
mEditor = mSharedPreferences.edit();
...
onCreate(){
InApp inApp = new InApp(context);
inApp.setupBillingClient(context);
}